gpt4 book ai didi

javascript - 在带有填充嵌套数组的 mongoDB 文档中查找并构建新的结果对象

转载 作者:可可西里 更新时间:2023-11-01 10:27:16 26 4
gpt4 key购买 nike

我有一些具有这种结构的文档——类别字段也可以为空

{
"_id" : "1",
"category" : [
{ "target" : "element 1" },
{ "target" : "element 2" }
]
},
{
"_id" : "2",
"category" : [
{ }
]
},
{
"_id" : "3",
"category" : [
{ "target" : "element 1" },
{ "target" : "element 2" }
]
},

我需要的是这样的结果

{ id: 1, element: "element 1" },
{ id: 1, element: "element 2" },
{ id: 3, element: "element 1" },
{ id: 3, element: "element 2" }

这意味着首先我必须检查所有包含目标元素的文档:

var result = db.collection.find({}, { 'category.target': 1})

1) 但这不起作用,因为我仍然得到空文档 (2)。

2) 其次,我需要为目标数组中的每个元素获取一个新的结果元素。我认为聚合不是正确的方法,因为每个元素都必须有新的对象。 map 只是导航字段。

所以我认为我必须迭代结果并构建一个新对象,对吗?

result.forEach(function($res){
// do a new foreach for every element in target-array?
newResult.push({ id: res._id, element: res.element });
});

最佳答案

您可以使用 aggregate 执行此操作与 find 不同,它允许您 reshape 文档。

db.test.aggregate([
// Duplicate each doc, once per category element
{$unwind: '$category'},
// Reshape the documents to create the element field
{$project: {element: '$category.target'}},
// Only include docs with an element
{$match: {element: {$exists: true}}}
])

结果:

"result" : [ 
{
"_id" : "1",
"element" : "element 1"
},
{
"_id" : "1",
"element" : "element 2"
},
{
"_id" : "3",
"element" : "element 1"
},
{
"_id" : "3",
"element" : "element 2"
}
]

关于javascript - 在带有填充嵌套数组的 mongoDB 文档中查找并构建新的结果对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32740854/

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