【发布时间】:2021-02-27 23:13:41
【问题描述】:
我尝试为 MongoDB 构建一个查询,该查询通过键值 (batch_id) 从文档中的数组返回所有唯一值。我已经成功地做到了这一点,对唯一的batch_ids 进行分组,但是我无法提取相应的键值 (batchName) 并计算每个数组中具有唯一值的对象的数量。
如何提取batchName 并计算对象的数量?我尝试了一些方法,但我认为$addToSet 有问题。
MongoPlayground:https://mongoplayground.net/p/j6Jkeh79Zqq
我目前的输出是:
[
{
"_id": "6032a5ad80443334a35f2232",
"batchData": [
{
"batch_id": "6032a5af80443334a35f2267TB"
},
{
"batch_id": "6032a5af80443334a35f26467JC"
},
{
"batch_id": "6032a5af80443334a5f74367UI"
}
]
}
]
我的预期输出是
[
{
"_id": "6032a5ad80443334a35f2232",
"batchData": [
{
"batch_id": "6032a5af80443334a35f2267TB",
"batchName": "Test 2",
"count": 2
},
{
"batch_id": "6032a5af80443334a35f26467JC",
"batchName": "Test 3",
"count": 1
},
{
"batch_id": "6032a5af80443334a5f74367UI",
"batchName": "Test 1",
"count": 2
}
]
}
]
示例文档:
[
{
"_id": "6032a5ad80443334a35f2232",
"List": [
{
"_id": "6032a5af80443334a35f2234",
"batch_id": "6032a5af80443334a5f74367UI",
"batchName": "Test 1",
},
{
"_id": "6032a5b080443334a35f2236",
"batch_id": "6032a5af80443334a5f74367UI",
"batchName": "Test 1",
},
{
"_id": "6032a5b080443334a35f2238",
"batch_id": "6032a5af80443334a35f2267TB",
"batchName": "Test 2",
},
{
"_id": "6032a5b080443334a35f2239",
"batch_id": "6032a5af80443334a35f2267TB",
"batchName": "Test 2",
},
{
"_id": "6032a5b080443334a35f2234",
"batch_id": "6032a5af80443334a35f26467JC",
"batchName": "Test 3",
}
]
}
]
Mongo 查询:
db.collection.aggregate([
{
$project: {
batchData: {
batch_id: "$List.batch_id",
},
},
},
{
$unwind: "$batchData.batch_id"
},
{
$group: {
_id: "$_id",
batchData: {
$addToSet: "$batchData"
},
},
},
])
【问题讨论】:
标签: mongodb mongodb-query