我收集了aTable张唱片,其中有两张唱片:

 {
    "title" : "record 1",
    "fields" : [ 
        {
            "_id" : 1,
            "items" : [ 
                1
            ]
        },
        {
            "_id" : 2,
            "items" : [ 
                2,3,4
            ]
        },
        {
            "_id" : 3,
            "items" : [ 
                5
            ]
        }
    ]
},

{
        "title" : "record 2",
        "fields" : [ 
            {
                "_id" : 4,
                "items" : [ 
                    7,8,9,10
                ]
            },
            {
                "_id" : 5,
                "items" : [ 

                ]
            },
            {
                "_id" : 6,
                "items" : [ 
                    11,12
                ]
            }
        ]
    }

我想更新aTable.fields.items个字段

items : [ 11,12 ]

items : [ 
   {item: 11, key: 0},
   {item:12, key: 0}
]

我使用forEach浏览字段,但无法保存:

var t = db.aTable.find();

t.forEach(function( aRow ) {
    aRow.fields.forEach( function( aField ){
        aField.items.forEach( function( item ){
            var aNewItem = { item: parseInt(item), ref: 0 };
            db.aTable.update(item, {$set:aNewItem})
        } )
    } )
});

推荐答案

为了得到你想要的,你需要一些东西:

t.forEach(function( aRow ) {
    var newFields = [];
    aRow.fields.forEach( function( aField ){
        var newItems = [];
        aField.items.forEach( function( item ){
            var aNewItem = { item: parseInt(item), ref: 0 };
            newItems.push( aNewItem );
        } );
        newFields.push({ _id: aField._id, items: newItems });
    } )
    aTable.update(
        { _id: aRow._id }, 
        { "$set": { "fields": newFields } }
    );
});

所以基本上你需要在更新之前"重新构造"你的数组

Mongodb相关问答推荐

基于另一子文档更改子文档的引用

MongoDB$unionWith,如何 Select 特定文档

MongoDB - 将对象转换为数组

MongoDB 聚合 - 条件 $lookup 取决于字段是否存在

如何向所有文档添加一个字段,其中前 100 个文档的值为 1,接下来的 100 个文档的值为 2,依此类推?

来自嵌套对象数组的 MongoDB 聚合

聚合 $accumulator + $project

在 MongoDB 中,如何使用对当前值进行操作的函数来更新嵌套文档的值?

Mongoose 返回包含属性内任何位置的值的所有文档

Meteor 中的平均聚合查询

如何将查询结果(单个文档)存储到变量中?

从 MongoDB find() 结果集中识别最后一个文档

在 MongoDB 中创建简短、唯一的对象 ID

mongodb上不区分大小写的查询

mongod 和 mongo 命令在 Windows 10 上不起作用

不能在模块外使用 import 语句

MongoDB 中的所有列

是否有支持 MongoDB 和 Devise 的 Rails 管理界面?

在 MongoDB 上使用 $push 更新数组时避免重复值

使用 mongodb 在数组中查找子文档