似乎我发现类似的每个问题总是回答错误"事情"。我有一个数据集,简单的文档(不是子文档)。每个文档有六个字段,基本上是位字段。每个文档应至少有一个这样的字段为真(1),但所有其他字段必须为假(0)。我认为最简单的方法来判断哪些文档不符合此规则是为每个文档的六个字段求和,如果它大于1,则它失败并且我想将文档拉出到一个集合中这些文件,所以我可以找到/查询它以获取更多信息或只是显示它。
所以,
{
"_id" : ObjectId("598d5fbd8b157042cc12e5bf"),
"FirstName" : "fred",
"Hispanic" : NumberInt(1),
"Indian" : NumberInt(0),
"Asian" : NumberInt(0),
"Black" : NumberInt(0),
"Pacific" : NumberInt(0),
"White" : NumberInt(0),
"Unknown" : NumberInt(0)
}
{
"_id" : ObjectId("598d5fbd8b157042cc12e5c0"),
"FirstName" : "joe",
"Hispanic" : NumberInt(0),
"Indian" : NumberInt(0),
"Asian" : NumberInt(0),
"Black" : NumberInt(0),
"Pacific" : NumberInt(0),
"White" : NumberInt(1),
"Unknown" : NumberInt(0)
}
{
"_id" : ObjectId("598d5fbd8b157042cc12e5c1"),
"FirstName" : "margie",
"Hispanic" : NumberInt(1),
"Indian" : NumberInt(0),
"Asian" : NumberInt(0),
"Black" : NumberInt(0),
"Pacific" : NumberInt(0),
"White" : NumberInt(1),
"Unknown" : NumberInt(0)
}
解决方案将返回其中一个字段,因为如果您将我提供的所有种族标识符相加,它将是" 2"而其他人将是1。
对于Mongo来说还是一个新手,样本有所帮助,但到目前为止,我所发现的所有内容似乎都围绕着对子文档数据进行求和来确定文档的选择,而我尝试的所有内容都没有返回任何内容。就像这是一个团体(不这么认为)或项目;我总结和添加[字段]或只是总结......我有点困惑。
感谢您提供的任何帮助。
答案 0 :(得分:0)
如果我理解得很好,你需要这样的东西:
db.yourCollection.aggregate(
[
{
$project: {
total: { $add: [ "$Hispanic", "$Indian", "$Asian", "$Black", "$Pacific", "$White", "$Unknown" ]}
}
},
{
$match: {
"total": {"$gt": 1}
}
},
]
);