假设我有两个以下的MongoDB文档:
{
"_id" : ObjectId(a59b0e19aff8a2ed2128bef97"),
"name" : "John",
"matches" : [
{
"name" : "Bob",
"count" : 10
},
{
"name" : "John",
"count" : 20
},
{
"name" : "Alice",
"count" : 30
}
]
}
{
"_id" : ObjectId(b59b0e19aff8a2ed2128bef97"),
"name" : "Mike",
"matches" : [
{
"name" : "Bob",
"count" : 10
},
{
"name" : "John",
"count" : 20
},
{
"name" : "Alice",
"count" : 30
}
]
}
我需要创建一个MongoDB查询来比较" name"使用" matches.name"。
在我的示例中,只有第一个文档会被匹配,因为" John"在"匹配"阵列。 第二个文档将不匹配,因为Mike不在数组中。
我尝试{$where : "this.matches.name == this.name"}
,但这不起作用。
有什么想法吗?
答案 0 :(得分:0)
我相信这可能就是您要查找的内容,aggregate
查询matches.$.name
以查看是否有任何匹配$name
db.collection.aggregate([{
"$redact": {
"$cond": [{
"$anyElementTrue": [{
"$map": {
"input": "$matches",
"as": "matches",
"in": {
"$eq": ["$$matches.name", "$name"]
}
}
}
]
},
"$$KEEP",
"$$PRUNE"
]
}
}
])
整齐地返回
{
"_id" : ObjectId("59c54e6f505e2f07180e60f7"),
"name" : "John",
"matches" : [
{
"name" : "Bob",
"count" : 10.0
},
{
"name" : "John",
"count" : 20.0
},
{
"name" : "Alice",
"count" : 30.0
}
]
}
答案 1 :(得分:-1)
您是否尝试过此功能查询方法?
db.myCollection.find( { $where: function() { return (this.matches.name == this.name) } } );
如果这适用于您的方案,请在此处发表评论:)