gpt4 book ai didi

javascript - 如何让 MongoDB 找到嵌套的 json 作为数组返回?

转载 作者:太空宇宙 更新时间:2023-11-04 02:30:53 24 4
gpt4 key购买 nike

我有这些数据:

{
"_id" : ObjectId("5461e16ee7caf96f8f3584a2"),
"num_marcacao" : "100",
"sexo" : "Fêmea",
"idade" : "20",
"bigdata" : {
"abortos" : [
{
"data_aborto" : "2014-11-11",
"causa_aborto" : "Aborto causa 1"
},
{
"data_aborto" : "2014-09-01",
"causa_aborto" : "Aborto causa 2"
}
],
"crias" : [
ObjectId("5461e16ee7caf96f8f3584a2")
]
}
}
{
"_id" : ObjectId("5461e1cae7caf96f8f3584a4"),
"num_marcacao" : "200",
"sexo" : "Fêmea",
"bigdata" : {
"crias" : [
ObjectId("5461e1f3e7caf96f8f3584a5"),
ObjectId("5461e760e7caf96f8f3584a6")
]
}
}

使用以下不同的函数我得到一个结果

db.animal.distinct('_id', {'bigdata.crias':{$exists:true}}

结果:

{
"0" : ObjectId("5461e16ee7caf96f8f3584a2"),
"1" : ObjectId("5461e1cae7caf96f8f3584a4")
}

现在我想获取 bigdata.crias 中的数组,就像不同查询的结果一样。我正在尝试这样做:

db.animal.find(
{
$and: [
{'num_marcacao': '200'},
{'bigdata.crias':{$exists: true}}
]
},
{
'bigdata.crias': true,
'_id': false
}
)

但是结果并不像我需要的那样。这是它返回的内容:

{
"bigdata" : {
"crias" : [
ObjectId("5461e1f3e7caf96f8f3584a5"),
ObjectId("5461e760e7caf96f8f3584a6")
]
}
}

我需要

{
"0" : ObjectId("5461e1f3e7caf96f8f3584a5"),
"1" : ObjectId("5461e760e7caf96f8f3584a6")
}

最佳答案

无论如何。 MongoDB 通常不会通过 .find().aggregate() 方法或它们周围的任何通用方法来执行此操作。只有.distinct()方法调用一种特殊形式,其中给出的结果“真正”只是要区分的指定“键”的数组。

您始终可以“检查”返回的对象并仅使用结构中的数组元素。您还可以为 .distinct() 指定“查询”参数首先的命令方法:

db.collection.distinct(
"bigdata.crias",
{
"bigdata.crias": { "$exists": true },
"num_marcacao": "200"
}
);

您还可以在其中看到您的$and争论是多余的。默认情况下,所有 MongoDB 查询参数都是“and”实现。除非您在同一“字段名称”上指定“多个”条件,否则不需要此选项。这将通过破坏基本的“散列/映射”“唯一键”规则而导致无效对象,这就是为什么此表单使用“数组”来保持其有效。

关于javascript - 如何让 MongoDB 找到嵌套的 json 作为数组返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26884978/

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