我的 MongoDB 存储具有以下结构的文档:
{
"application_detail":{},
"curl_detail":{
"Curl1":{
"key1":"value1",
"key2":"value2"
},
"Curl2":{
"key1":"value1",
"key2":"value2"
},
"Curl3":{
"key1":"value1",
"key2":"value2"
},
"Curl4":{
"key1":"value1",
"key2":"value2"
},
/*total number of curls are unknown*/
}
}
如何使用express和mongoose从mongoDB中获取curl_detail
下存在的所有 curl 的key1
?
预期输出:
{
"curl_detail": {
"Curl1": {
"key1": "value1"
},
"Curl2": {
"key1": "value1"
},
"Curl3": {
"key1": "value1"
},
"Curl4": {
"key1": "value1"
}
}
}
注意:卷发总数未知。
最佳答案
我想建议您更改数据结构
"curl_detail": {
"Curl1": {
"key1": "value1",
"key2": "value2"
},
"Curl2": {
"key1": "value1",
"key2": "value2"
}
}
至
"curl_detail": [{
"key1": "value1",
"key2": "value2"
},
{
"key1": "value1",
"key2": "value2"
}
]
将数据结构存储在数组中将使您可以更轻松地查找某些数据。此外,也不需要拥有具有 Curl1
、Curl2
等属性的对象。
对于新的数据结构,已经有一些答案和解释:
1) Mongo find value with unknown parent key
2) Query MongoDB by value when parent key is unknown
3) MongoDB: Find document given field values in an object with an unknown key
更新
如果无法更改数据结构,请参阅此解决方案(使用 $arrayToObject
/$objectToArray
来确定嵌套键的名称,例如“Curl1” ”):
db.collection.aggregate([{
$addFields: {
curl_detail: {
$arrayToObject: {
$map: {
input: {
$objectToArray: "$curl_detail"
},
as: "details",
in: {
k: "$$details.k",
v: {
key1: "$$details.v.key1"
}
}
}
}
}
}
},
{
$project: {
_id: 0,
curl_detail: 1
}
}
])
输出如下:
[
{
"curl_detail": {
"Curl1": {
"key1": "value1"
},
"Curl2": {
"key1": "value1"
},
"Curl3": {
"key1": "value1"
},
"Curl4": {
"key1": "value1"
}
}
}
]
您可以通过Mongo Playground查看
关于node.js - 使用 mongoose 获取子文档的 Node api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60038514/