【发布时间】:2015-03-18 13:27:23
【问题描述】:
我使用聚合功能来获取具有特定条件的数组。所以聚合遍历集合中的所有文档,然后遍历文档中的所有宠物数组,最后遍历嵌套在宠物数组中的所有治疗数组。
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"
}
]
}
]
}]
我的目标是创建一个数组,该数组将包含所有文档中的所有对象嵌套处理数组。所以每个文档都有宠物数组,宠物数组中的每个对象都有治疗数组。我想在所有文档中获取所有这些处理数组,并使用 $match 指定名称。所以结果我有一个数组,其中包含来自所有文档中所有处理数组的对象,其中名称键等于某个用户。
【问题讨论】:
-
完全不清楚您要做什么。
{ "$uwnind": "$_id" },{ "{ "$group": { "_id": "$_id" }}在这里什么都不做。 -
我对 mognodb 不是很有经验,但我这样做是为了得到一个包含对象的数组。如果你不介意,如果你能纠正我,我会很高兴。我更新了问题。
-
您能否展示一些文档以及您希望从中获得的结果。
-
现在我们有了一个文档,但是您希望从该数据中得到什么结果?来自多个文档呢? stackoverflow.com/help/mcve
标签: javascript arrays mongodb express