我有一个包含子文档的数组。我需要将此子文档中的字段带到子文档外部。该文件是这样的。
field1: "abc"
field2: "dsf"
field3: {
allowed-type: [
field4: "32"
}
我需要在数组allowed-type之外取字段4并将其放在field3下。我试过以下
db.collection.find({}).forEach( function (doc) {
doc.field3.field4 = 'doc.field3.allowed-type.field4';
db.collection.save(doc); });
问题是数组allowed-type包含一个连字符,所以我不能在不使用双引号的情况下引用它。但是当我使用双引号时,field4将被指定为'doc.field3.allowed-type.field4'作为字符串,而不是从doc.field3.allowed-type.field4中获取值。
答案 0 :(得分:0)
聚合是您的解决方案。您首先必须展开文档,这将基本上展平文档并从阵列中取出“32”。然后,您需要获取返回的结果并将“field4”值投影到新字段,该字段是“field3”下的文档。 pretty()只是以可读格式呈现结果。
db.fields.aggregate(
{$unwind:"$field3.allowed-type.field4"},
{$project:
{field1:1,
field2:1,
field3:
{field4: "$field3.allowed-type.field4"
}} }).pretty();