gpt4 book ai didi

javascript - MongoDB 聚合不返回具有相同值的对象

转载 作者:行者123 更新时间:2023-11-28 19:19:51 25 4
gpt4 key购买 nike

我使用聚合功能来获取具有特定条件的数组。因此,聚合遍历集合中的所有文档,然后遍历文档中的所有宠物数组,最后遍历嵌套在宠物数组中的所有治疗数组。

  db.collection.aggregate({$unwind:"$pets"},{$group:{"_id":"$pets.treatments"}},
{$unwind:"$_id"},{$group:{"_id":"$_id"}},{$match:
{"_id.name":"name"}}

结果我得到这样的结果:

[{"_id": 
{"name":"vet","treatment":"misoshiur","paid":"NO","opinion":"Good"}},
{"_id":{"name":"vet","treatment":"czekolada","paid":"NO","opinion":""}},
{"_id":
{"name":"vet","treatment":"misoshiur","paid":"NO","opinion":"Excellent"}},etc...]

我的问题是,我可能会拥有完全相同的两个或更多对象。

{"_id":
{"name":"vet","treatment":"misoshiur","paid":"NO","opinion":"Excellent"}}
{"_id":
{"name":"vet","treatment":"misoshiur","paid":"NO","opinion":"Excellent"}}

然后,当我在 mongodb 中执行命令时,我有两个完全相同的对象,它不会返回它们,它只返回一个,为什么呢?以及如何让它返回所有对象?甚至这些物体都一模一样?

实际上我对mognodb不太有经验,即使查询不是那么完美,它也给了我我所要求的;)但是有人可以解释一下为什么mongodb在使用$match之后,拒绝它已经拥有的对象吗大批?对于我的项目来说,这很重要,因为我正在计算意见,并且意见可能会被某人重复。

JSON

 [{
"_id" : ObjectId("550361c38323c1f65dae65c3"),
"username" : "pet",
"password" : "pet",
"character" : "pet",
"pets" : [
{
"name" : "cat",
"kind" : "micoc",
"age" : "2",
"treatments" : [
{
"name" : "vet",
"treatment" : "czekolada",
"paid" : "NO",
"opinion" : "Good"
}
]
},
{
"name" : "io",
"kind" : "dog",
"age" : "5",
"treatments" : [
{
"name" : "vet",
"treatment" : "misoshiur",
"paid" : "NO",
"opinion" : "Excellent"
}
]
}
]
}]

我的目标是创建一个数组,其中包含所有文档嵌套处理数组中的所有对象。因此每个文档都有 pets 数组,pets 数组中的每个对象都有treatments 数组。我想在所有文档中获取所有这些处理数组,并使用 $match 指定名称。因此,我的数组包含所有文档中所有处理数组中的对象,其名称键等于某个用户。

最佳答案

因为我不确定“使用 $match 指定名称”是什么意思,因为 pets 数组也有“名称”,治疗数组也有“名称”。我假设您想对“pets.name”进行 $match 并获取数组中的所有治疗。因为 pets 是一个数组,首先将它们展开,然后对治疗进行展开,因为它也是一个数组,然后与“pets.name”匹配,然后按“pets.name”进行分组并推送到治疗数组。

   aggregate([
{
$unwind: "$pets"
},
{
$match: {
"pets.name": "io"
}
},
{
$unwind: "$pets.treatments"
},
{
$group: {
_id: "$pets.name",
treatments: {
$push: "$pets.treatments"
}
}
}
])

输出将是这样的。

{
"_id": "io",
"treatments": [
{
"name": "vet",
"treatment": "misoshiur",
"paid": "NO",
"opinion": "Excellent"
}
]
}

如果您想在 pets.treatment.name 上进行 $match,请将 $match 替换为“$pets.treatments.name”,将 $group 中的 _id 替换为“$pets.treatments.name”。 在展开 pets.treatment 和 $group 之前写入 $match 将优化查询。

关于javascript - MongoDB 聚合不返回具有相同值的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29085377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com