【发布时间】: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