【问题标题】:Mongo / Mongoose query works in Mongo shell but not in Node (on EC2 Ubuntu image)Mongo / Mongoose 查询在 Mongo shell 中有效,但在 Node 中无效(在 EC2 Ubuntu 映像上)
【发布时间】:2018-07-17 06:23:36
【问题描述】:

我很难确定为什么此查询在 Mongo shell 中有效,但当我尝试从浏览器访问服务器端点时却不行。

外壳命令:

db.playlists.find({keywords: {"$in" : ["featured"]}}).limit(5)

服务器代码:

app.get('/getFeaturedPlaylists', (req, res) => { 
  let query = {
    keywords: { "$in" : ["featured"]}
  }
  database.Playlist.find({query}).limit(5).exec(function(err, data) {                 
    err ? console.log(err) : res.send({body: JSON.stringify(data)});
  })
})

预期结果是一个播放列表对象数组:

{"body": "[{\"songList\":[{\"songId\":522,\"bpm\":45},{\"songId\":310,\"bpm\":45},{\"songId\":199,\"bpm\":90},{\"songId\":170,\"bpm\":150},{\"songId\":17,\"bpm\":150},{\"songId\":722,\"bpm\":45},{\"songId\":767,\"bpm\":90},{\"songId\":754,\"bpm\":120},{\"songId\":844,\"bpm\":150},{\"songId\":422,\"bpm\":120},{\"songId\":638,\"bpm\":90},{\"songId\":243,\"bpm\":150},{\"songId\":524,\"bpm\":90},{\"songId\":575,\"bpm\":120},{\"songId\":143,\"bpm\":120}],\"shuffledQueue\":[],\"keywords\":[\"bluegrass\",\"featured\"],\"_id\":\"5a76188fde76d97bda5e342e\",\"playlistId\":2,\"playlistName\":\"Playlist2\"},{\"songList\":[{\"songId\":401,\"bpm\":45},{\"songId\":536,\"bpm\":150},{\"songId\":982,\"bpm\":60},{\"songId\":812,\"bpm\":60},{\"songId\":466,\"bpm\":150}],\"shuffledQueue\":[],\"keywords\":[\"featured\",\"bluegrass\"],\"_id\":\"5a76188fde76d97bda5e3432\",\"playlistId\":6,\"playlistName\":\"Playlist6\"},{\"songList\":[{\"songId\":248,\"bpm\":120},{\"songId\":84,\"bpm\":45},{\"songId\":53,\"bpm\":60},{\"songId\":749,\"bpm\":45},{\"songId\":811,\"bpm\":120}],\"shuffledQueue\":[],\"keywords\":[\"featured\",\"hip-hop\"],\"_id\":\"5a76188fde76d97bda5e3433\",\"playlistId\":7,\"playlistName\":\"Playlist7\"},{\"songList\":[{\"songId\":894,\"bpm\":150},{\"songId\":190,\"bpm\":60},{\"songId\":235,\"bpm\":60},{\"songId\":632,\"bpm\":60},{\"songId\":970,\"bpm\":60},{\"songId\":475,\"bpm\":90},{\"songId\":304,\"bpm\":60},{\"songId\":816,\"bpm\":120},{\"songId\":613,\"bpm\":150},{\"songId\":310,\"bpm\":45},{\"songId\":599,\"bpm\":45},{\"songId\":91,\"bpm\":90},{\"songId\":650,\"bpm\":120},{\"songId\":219,\"bpm\":45},{\"songId\":290,\"bpm\":90}],\"shuffledQueue\":[],\"keywords\":[\"hip-hop\",\"featured\"],\"_id\":\"5a76188fde76d97bda5e3436\",\"playlistId\":10,\"playlistName\":\"Playlist10\"},{\"songList\":[{\"songId\":778,\"bpm\":60},{\"songId\":652,\"bpm\":60},{\"songId\":792,\"bpm\":90},{\"songId\":353,\"bpm\":120},{\"songId\":528,\"bpm\":60},{\"songId\":887,\"bpm\":120},{\"songId\":287,\"bpm\":90},{\"songId\":926,\"bpm\":120},{\"songId\":671,\"bpm\":90}],\"shuffledQueue\":[],\"keywords\":[\"featured\",\"reggae\"],\"_id\":\"5a76188fde76d97bda5e3437\",\"playlistId\":11,\"playlistName\":\"Playlist11\"}]"}

实际结果是一个空数组:

{"body":"[]"}

更奇怪的是,这个问题仅在我将服务器和数据库移动到 EC2 实例时出现。在我的本地机器上使用完全相同的代码和数据集,它会按照我的预期响应(通过 Postman 或 Chrome——这就是我得到上面“预期响应”sn-p 的方式)。此外,指向该数据库的所有其他服务器端点都可以工作,但它们只是在寻找单独的播放列表。

非常感谢您对此的任何见解,当然我很乐意根据需要提供更多详细信息。

谢谢!

【问题讨论】:

  • 你尝试发送这样的东西:db.Playlist.find({{keywords: {$in: ['...']}}}),但需要:db.Playlist.find({keywords: {$in: ['...']}}),为此你需要删除{},它看起来像:database.Playlist.find(query).limit(5). ...你的查询 - 是已经反对,您不需要 {} 围绕查询
  • 谢谢!这解决了它。

标签: node.js mongodb amazon-ec2 mongoose


【解决方案1】:

问题来了,

 database.Playlist.find({query})

您传递的不是查询对象,而是一个空对象 { }{query}

改为这样做,

 database.Playlist.find(query)

希望这能解决问题。

【讨论】:

  • 解决了,谢谢!关于为什么 .find({query}) 语法可以在我的本地机器上工作但不能在 EC2 实例上工作的任何见解?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多