gpt4 book ai didi

mongodb - 如何使用 MongoDB 平整子文档中的字段

转载 作者:可可西里 更新时间:2023-11-01 09:36:13 25 4
gpt4 key购买 nike

我有以下集合,其中每个文档都有一个包含文档快照的数组。

{
"_id" : 1,
"field1" : "value1",
"field2" : "value2",
"field3" : "value3",
"version" : [
{
"v" : 3,
"element" : {
"field1" : "value1",
"field2" : "value2",
"field3" : "value3"
}
},
{
"v" : 1,
"element" : {
"field1" : "value11",
"field2" : "value12",
"field3" : "value13"
}
}
]
}
{
"_id" : 2,
"field1" : "valueA",
"field2" : "valueB",
"field3" : "valueC",
"version" : [
{
"v" : 2,
"element" : {
"field1" : "valueA",
"field2" : "valueB",
"field3" : "valueC"
}
}
]
}

通过下一个操作,我检索特定快照中文档的状态:

db.test.aggregate( 
{ $unwind: '$version' },
{ $match: { 'version.v': { $lte: 3 } }},
{ $group: { '_id' : '$_id', 'element' : { $first: '$version.element'}} })

结果是:

{
"_id" : 2,
"element" : {
"field1" : "value1",
"field2" : "value2",
"field3" : "value3"
}
}
{
"_id" : 1,
"element" : {
"field1" : "valueA",
"field2" : "valueB",
"field3" : "valueC"
}
}

我的问题是是否有任何方法可以将子文档“元素”中的字段展平以显示在顶层,如下所示:

{
"_id" : 2,
"field1" : "value1",
"field2" : "value2",
"field3" : "value3"
}
{
"_id" : 1,
"field1" : "valueA",
"field2" : "valueB",
"field3" : "valueC"
}

最佳答案

你可以使用 $project :

> db.test.aggregate(
{ $unwind: '$version' },
{ $match: { 'version.v': { $lte: 3 } }},
{ $group: { '_id' : '$_id', 'element' : { $first: '$version.element'}} },
{$project : { "field1" : "$element.field1",
"field2" : "$element.field2",
"field3" : "$element.field3" } } ).pretty();

这会产生您预期的输出。

但是,我建议考虑使用一个单独的集合,其中每个版本都有自己的文档,适用于我能想到的大多数用例。请记住,重复增长的文档不利于性能,并且与立即查询相比,读取复杂度相对较高...

关于mongodb - 如何使用 MongoDB 平整子文档中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28842353/

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