Mongodb 如何构造在两个字段上聚合的mongo查询?
TL;博士如何以两种不同方式聚合集合的方式查询mongo? 我正在学习查询MongoDB。假设我有一个集合,其中包含用户提交问卷的结果,然后审核人签署他们已经审核了问卷 “我的收藏”中的记录如下所示:Mongodb 如何构造在两个字段上聚合的mongo查询?,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,TL;博士如何以两种不同方式聚合集合的方式查询mongo? 我正在学习查询MongoDB。假设我有一个集合,其中包含用户提交问卷的结果,然后审核人签署他们已经审核了问卷 “我的收藏”中的记录如下所示: { _id: 0, Questions: [ { label: "fname", response: "Sir" }, { label: "lname
{
_id: 0,
Questions:
[
{
label: "fname",
response: "Sir"
},
{
label: "lname",
response: "Robin"
},
{
label: "What is your name?",
response: "Sir Robin of Camelot"
},
{
label: "What is your quest?",
response: "To seek the holy grail"
},
{
label: "What is the capital of Asyria?",
response: "I don't know that."
}
],
Signatures:
[
"Lancelot",
"Arthur"
]
}
我正在创建一个报告,该报告将显示每条记录的摘要。
对于每条记录,我需要显示以下内容:
- 名字
- 姓
- 签名的数量
// In order to query the first and last name, I use this query:
[
{ $unwind: "$Questions" },
{ $match: { "Questions.Label": { $in: ["fname", "lname"] } } },
{ $project: { "Questions": 1 } },
{ $group: { _id: "$_id", Questions: { $push: "$Questions" } } }
]
// In order to query the number of signatures, I use this query:
[
{ $project: { "SignatureCount": { $size: "$Signatures" } } }
]
这两个查询都可以使用,但我想编写一个查询,一起返回数据
因此,例如,如果上面的示例记录是我的集合中唯一的记录,我希望查询返回以下内容:
{
_id: 0,
Questions:
[
{
label: "fname",
response: "Sir"
},
{
label: "lname",
response: "Robin"
}
],
SignatureCount: 2
}
在3.4版本的单个项目阶段中,您可以重写查询以获得这两个结果 用于筛选问题
[
{"$match":{"Questions.Label":{"$in":["fname", "lname"]}},
{"$project":{
"Questions":{
"$filter":{
"input":"$Questions",
"as":"q",
"cond":{"$in":["$$q.Label",["fname","lname"]]}
}
},
"SignatureCount":{"$size":"$Signatures"}
}}
]
可能需要编辑:输入文档使用
标签
字段,聚合查询使用标签
。我看到一个错误,显示无效运算符“$in”代码:15999
。您需要3.4版本。shell上的db.version()来检查您的版本。如果您需要较低版本,我可以添加变通方法。您可以使用上面提到的变通方法。看起来shell和DB都是版本3.2.3。但我几天前刚下载并安装了它。为什么我应该得到一个旧版本?您是否尝试过“cond”:{$setIsSubset:[[“$$q.Label”],[“fname”,“lname”]}
?