gpt4 book ai didi

javascript - MongoDB 发现 $in 在 sails.js 中不工作

转载 作者:行者123 更新时间:2023-11-30 17:37:14 24 4
gpt4 key购买 nike

我正在使用 Sail.js 及其 Waterline ORM 创建一个简单的应用程序。对于其中的一部分,我遵循了 NoSQL 的数据透视表模式的等价物:每个用户都有一个数组,subscriptions,包含他们订阅的所有 channel 。我正在尝试使用以下方法查找所有订阅特定 channel ID 的用户:

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

每行代码都不是最漂亮的,但应该可以工作。问题是,事实并非如此。 users 为空数组,err 为空。他们查询实际执行的是,例如(使用 Node 检查器):

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

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

还有想法?谢谢!

最佳答案

仅供引用,接受的答案是有效的 Mongo 查询但不是有效的 Sails 代码。你想要:

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

您的原始代码不起作用的原因是 Sails ORM (Waterline) 不理解像 $in 这样的原生 Mongo 运算符。但是,由于它使用底层 Mongo 适配器来执行 find 操作,因此对单个 channel 的搜索将匹配在其 subscriptions 数组中包含该 channel 的任何记录。请注意,如果您确实需要使用低级 Mongo 运算符(如 $all),您可以使用模型类的 native 方法来访问底层 Mongo适配器。参见 this answer了解更多详情。

关于javascript - MongoDB 发现 $in 在 sails.js 中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21787060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com