我有一个看起来像这样的MongoDB文档:
{
"_id": 000000000001,
"sample": [
{
"_id": {
"$oid": "12345678910"
},
"Phone": 5555555555,
"LastName": "Musk",
"FirstName": "Elon",
"responses": {
"question1": "hello",
"question2": "world"
}
},
{
"_id": {
"$oid": "12345678911"
},
"Phone": "1111111111",
"LastName": "Jobs",
"FirstName": "Steve",
"responses": {
"question1": "goodbye",
"question2": "world"
}
}
]
}
我想让$sum
对hello
做出回复question1
的所有人中,以及所有对{{ 1}}。
例如。我想要一个看起来像这样的回复:
world
我的查询看起来像这样,但是没有用。当我知道不是这种情况时,只会返回给定金额的question2
。
{ 'question1': 1, 'question2': 2 }
有人可以帮我吗?
答案 0 :(得分:0)
您需要使用$unwind的数据来获取每个响应的单个文档,并使用$facet来运行两个单独的过滤条件。然后,您需要$size来获取剩余数据集的长度,请尝试:
db.col.aggregate([
{ $unwind: "$sample" },
{ $project: { responses: { $objectToArray: "$sample.responses" } } },
{ $unwind: "$responses" },
{
$facet: {
hello: [ { $match: { $expr: { $and: [ { $eq: [ "$responses.k", "question1" ] }, { $eq: [ "$responses.v", "hello" ] } ] } } } ],
world: [ { $match: { $expr: { $and: [ { $eq: [ "$responses.k", "question2" ] }, { $eq: [ "$responses.v", "world" ] } ] } } } ],
}
},
{
$project: {
question1: { $size: "$hello" },
question2: { $size: "$world" },
}
}
])