2

db.find()可以通过指定参数轻松管理结果集中某些字段的存在fields(我使用 Meteor 并在服务器端测试所有查询,在发布功能中)。SayMeteor.collection.find({}, { fields: { 'a': false } })告诉 Mongoa从结果集中排除字段。

但是,如果a是子文档,这不起作用。比如说,它有两个字段:xy。如果我指定{ 'a.x': false },则排除其中一个字段,但不排除另一个。如果我添加{ 'a': false},什么都不会发生。

问题是:有没有办法从结果集中过滤掉位于文档的某些特定子文档中的所有字段?

4

2 回答 2

1

仅适用于包含或排除 - 不能同时在同一发布选择

于 2013-11-17T01:09:07.273 回答
0

问题是我已经添加子文档的名称及其字段名称,如下所示{fieldB: false, 'fieldB.sub1': false}:在这种情况下,mongo 会忽略外部排除并使用内部排除。删除包含在其中的所有内容fieldB可以解决问题。

顺便说一句,这是 Mongo 的行为,而不是 Meteor 的绑定。您可以轻松地复制它。说,您有一个带有 fieldfieldA的文档,这是一个带有两个字段的子文档:sub1sub2

// Returns _id only
db.items.find({}, {fieldB: false});

// Returns fieldB.sub2
db.items.find({}, {fieldB: false, 'fieldB.sub1': false});
于 2013-11-17T19:14:58.763 回答