MongoDB在$ sails.js中找不到$

我正在用Sail.js和Waterline ORM创build一个简单的应用程序。 对于其中的一部分,我遵循NoSQL的数据透视表模式:每个用户都有一个数组, subscriptions所有subscriptions的频道。 我试图find订阅了特定频道ID的所有用户,使用以下内容:

 User.find({subscriptions: {$in: [req.param('channel')]}}).done(function (err, users) { /* ... */ }); 

不是每个编写的最美丽的代码行,但它应该工作。 问题是,事实并非如此。 users是一个空数组,而err为空。 他们查询实际执行的是,例如(使用节点检查器):

 { subscriptions: { '$in': [ '52fd1a033004de2d9bcb4980' ] } } 

当这个相同的查询被用来通过umongo GUI“查找”用户时,它可以正常工作。 但是,执行该function时不会find用户。

和想法? 谢谢!

您不需要$ in就可以在数组内find某些东西。 一个简单的发现将诀窍:

 db.users.find({subscriptions : '52fd1a033004de2d9bcb4980'}) 

具有该频道的所有用户将被退回。

只是FYI,接受的答案是有效的Mongo查询,但不是有效的Sails代码。 你要:

 User.find({subscriptions: req.param('channel')}).done(function (err, users) { /* ... */ }); 

你原来的代码不起作用的原因是Sails ORM(Waterline)不理解像$in这样的本地Mongo运营商。 但是,由于它使用底层Mongo适配器执行find操作,因此对单个通道的search将匹配在其subscriptions数组中包含该通道的所有logging。 请注意,如果您需要使用低级别的Mongo操作符(如$all ),则可以使用模型类的native方法访问底层的Mongo适配器。 看到这个答案的更多细节。