javascript - 在meteorjs中过滤嵌套文档

标签 javascript mongodb meteor

我在尝试在 Meteor 中过滤嵌套文档时遇到了一些麻烦,并且我不想使用 MongoDB 聚合来展开我的文档。

我的用户文档的示例

{
   Publications:[{ 
       type:1
   },{ 
       type:2
   }]
}

当我进行查找仅获取类型 1 时,我得到了预期的结果 - 它们仅返回具有类型 1 发布的用户文档,但它们也返回类型 2 的发布,因为它们位于发布中该用户的数组。

我可以在结果中创建一个循环,以便在发布之前手动删除这些出版物,但我认为这不是正确的方法。

有人可以帮助指导我找到更好的解决方案吗?

Edited

肖恩的回答很好,但还不是正确的,投影在 meteor 上不起作用。这适用于 robomongo,但在项目中仍然返回用户的 2 种出版物类型。

最佳答案

尝试一下这个查询。

Meteor.users.find(
    { 'Publications.type': 1 },
    { fields: { 'Publications.$': 1 } }
);

这应该找到具有类型 1 出版物的用户,并且仅在输出中包含那些匹配的出版物。您也可以将其他字段包含在输出中,方法是将它们包含在 projection parameter 中。 (例如,{ 'Publications.$': 1, profile: 1 })。

有一点需要注意。我认为使用 { 'Publications.$': 1 } 投影的查询只能在服务器端完成。客户端使用的minimongo实现不支持。

有关 $ 投影的更多信息可以找到 here .

关于javascript - 在meteorjs中过滤嵌套文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35488120/

相关文章:

javascript - 正则表达式\n(换行)错误

node.js - 无法从 mongodb-atlas 获取数据?

node.js - Redis、事务和吞吐量

javascript - 如何删除 ReactMeteorData 中的警告消息?

javascript - 从 mongoDB 获取字段值并分配给 var 给出 undefined

javascript - 无限重复字符串 - 返回无限字符串 N 长度内特定字符的计数 - JavaScript

javascript - 如何在加载页面时单击按钮并获取其参数值

javascript - 当调用返回相同对象的函数时,无论是否作为构造函数调用,我是否应该使用 `new` ?

node.js - 如何在 Mongoose 中填充嵌套实体?

meteor - 自动更新本地 Meteor 包声明的依赖项