我的文档结构如下:
{
"field1": "value",
"field2": "value",
"items": [
{
"inField1": "value1",
"inField2": "value2",
"votes": {
"count": 2,
"people": [
{
"username": "user1",
"image": "http://image/to/user1/profile.jpg"
},
{
"username": "user2",
"image": "http://image/to/user2/profile.jpg"
}
]
}
},
{
"inField1": "value3",
"inField2": "value4",
"votes": {
"count": 1,
"people": [
{
"username": "user1",
"image": "http://image/to/user1/profile.jpg"
}
]
}
}
]
}
现在我需要所有项(单个物品对象字段),投票属性的任何人属性中的用户名为 用户1
在上面提到的示例中,它应该同时返回项,因为它们都在username属性中包含 user1 ,但是如果我搜索 user2 然后返回第一个项目。
答案 0 :(得分:2)
在另一个SO链接中找到了这个问题的答案: https://stackoverflow.com/a/20155210/2641194
首先,我们必须 $ unwind 数组,然后每个人的数据是一个单独的文档,然后我们的 $ match 进入图片只挑选那些满足查询的人:
[3:4,3:4]
如果您需要进一步了解 $ unwind ,以及它是如何运作的,请参阅此mongodb文档链接:https://docs.mongodb.org/manual/reference/operator/aggregation/unwind/
答案 1 :(得分:1)
使用聚合框架,首先展开项目数组并匹配它们。
试试这个:
db.getCollection('test').aggregate(
[{
"$unwind": "$items"
}, {
"$match": {
"items.votes.people.username": "user2"
}
}]
)