首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB发现$in不在sails.js工作

MongoDB发现$in不在sails.js工作
EN

Stack Overflow用户
提问于 2014-02-14 18:38:53
回答 2查看 1.7K关注 0票数 1

我正在用Sail.js和它的Waterline创建一个简单的应用程序。对于其中的部分内容,我遵循的是NoSQL的枢轴表模式:每个用户都有一个数组,subscriptions,包含他们订阅的所有通道。我试图使用以下方法查找订阅特定频道id的所有用户:

代码语言:javascript
复制
User.find({subscriptions: {$in: [req.param('channel')]}}).done(function (err, users) {
   /* ... */
});

不是每写的代码中最漂亮的一行,但它应该能工作。问题是,它不是。users是一个空数组,而err是空数组。例如,他们查询实际执行的is (使用节点检查器):

代码语言:javascript
复制
{ subscriptions: { '$in': [ '52fd1a033004de2d9bcb4980' ] } }

当使用相同的查询通过umongo GUI“查找”用户时,它的工作正常。但是,在执行函数时没有找到任何用户。

还有想法?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-14 18:57:19

您不需要$in在数组中找到一些东西。一个简单的发现就能做到这一点:

代码语言:javascript
复制
db.users.find({subscriptions : '52fd1a033004de2d9bcb4980'})

使用该频道的所有用户都将被返回。

票数 0
EN

Stack Overflow用户

发布于 2014-02-17 18:39:51

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

代码语言:javascript
复制
User.find({subscriptions: req.param('channel')}).done(function (err, users) {
  /* ... */
});

您的原始代码不起作用的原因是Sails (水线)不理解像$in这样的蒙古族本地操作符。但是,由于它使用底层find适配器执行subscriptions操作,因此搜索单个通道将匹配subscriptions数组中包含该通道的任何记录。请注意,如果您确实需要使用低级Mongo操作符(如$all),则可以使用模型类的native方法来访问底层Mongo适配器。有关更多详细信息,请参阅this answer

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21787060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档