通过指定db.find()
参数(我使用Meteor并在发布函数中测试服务器端的所有查询),可以轻松管理fields
结果集中某些字段的存在。说Meteor.collection.find({}, { fields: { 'a': false } })
告诉Mongo从结果集中排除字段a
。
但是,如果a
是子文档,则不起作用。比如说,它有两个字段:x
和y
。如果我指定{ 'a.x': false }
,则会排除其中一个字段,但不包括其他字段。如果我添加{ 'a': false}
,则不会发生任何事情。
这是一个问题:有没有办法从结果集中过滤掉位于文档某些特定子文档中的所有字段?
答案 0 :(得分:1)
只能与包含或排除一致 - 不能同时发布选择
答案 1 :(得分:0)
问题在于我添加了两个子文档的名称及其字段名称,如下所示:{fieldB: false, 'fieldB.sub1': false}
。在这种情况下,mongo忽略外部排除并使用内部排除。删除fieldB
中包含的所有内容可以解决问题。
顺便说一句,这是Mongo的行为,而不是Meteor的绑定。您可以轻松地重现它。比如说,您的文档包含字段fieldA
,这是一个包含两个字段的子文档:sub1
和sub2
。
// Returns _id only
db.items.find({}, {fieldB: false});
// Returns fieldB.sub2
db.items.find({}, {fieldB: false, 'fieldB.sub1': false});