我正在用Sail.js和它的Waterline创建一个简单的应用程序。对于其中的部分内容,我遵循的是NoSQL的枢轴表模式:每个用户都有一个数组,subscriptions,包含他们订阅的所有通道。我试图使用以下方法查找订阅特定频道id的所有用户:
User.find({subscriptions: {$in: [req.param('channel')]}}).done(function (err, users) {
/* ... */
});不是每写的代码中最漂亮的一行,但它应该能工作。问题是,它不是。users是一个空数组,而err是空数组。例如,他们查询实际执行的is (使用节点检查器):
{ subscriptions: { '$in': [ '52fd1a033004de2d9bcb4980' ] } }当使用相同的查询通过umongo GUI“查找”用户时,它的工作正常。但是,在执行函数时没有找到任何用户。
还有想法?谢谢!
发布于 2014-02-14 18:57:19
您不需要$in在数组中找到一些东西。一个简单的发现就能做到这一点:
db.users.find({subscriptions : '52fd1a033004de2d9bcb4980'})使用该频道的所有用户都将被返回。
发布于 2014-02-17 18:39:51
只是FYI,接受的答案是有效的Mongo查询,而不是有效的Sails代码。你想:
User.find({subscriptions: req.param('channel')}).done(function (err, users) {
/* ... */
});您的原始代码不起作用的原因是Sails (水线)不理解像$in这样的蒙古族本地操作符。但是,由于它使用底层find适配器执行subscriptions操作,因此搜索单个通道将匹配subscriptions数组中包含该通道的任何记录。请注意,如果您确实需要使用低级Mongo操作符(如$all),则可以使用模型类的native方法来访问底层Mongo适配器。有关更多详细信息,请参阅this answer。
https://stackoverflow.com/questions/21787060
复制相似问题