我收集了3份文件:
{"users":[{"id":1,"gender":"male"},{"id:1,"gender":"male"},{"id":1,"gender":"male"}]}
{"users":[{"id":1,"gender":"male"},{"id:1","gender":"male"},{"id":1,"gender":"female"}]}
{"users":[{"id":1,"gender":"female"},{"id":1,"gender":"female"},{"id":1,"gender":"female"}]}
我想写一个查询,其中每个性别都是男性(users.gender:“男性”),因此只能得到:
{"users":[{"id":1,"gender":"male"},{"id:1,"gender":"male"},{"id":1,"gender":"male"}]}
到目前为止,我能够获得至少有一个字段符合条件的文档。所以我得到了:
{"users":[{"id":1,"gender":"male"},{"id:1","gender":"male"},{"id":1,"gender":"female"}]}
{"users":[{"id":1,"gender":"female"},{"id":1,"gender":"female"},{"id":1,"gender":"female"}]}
有什么办法吗?
答案 0 :(得分:1)
假设您的文档中只有两种类型的性别:male
和female
,所有不包含female
作为性别类型的文档将自动成为每个类型性别类型为male
。因此可以使用$nin
[doc]。
当然,这是从你的例子中大量假设和推断,这一点根本不清楚。请将您的问题格式化为正确和简洁,以便其他人可以受益。感谢。
答案 1 :(得分:0)
这实际上是另一种说Abhishek Pathak已经说过的方式:
您可以从可能的结果集中排除female
。假设您的集合名为example
,您可以使用以下查询:
db.examples.find({"users.gender" : {$nin: ["female"]}})