批量更新数据到mongodb

时间:2016-12-29 02:33:28

标签: node.js mongodb express mongoose mongodb-query

我的数据存储在我的数据库中。

[
    {
        date:'1-1-2016',
        users:[
            {
                'name':'james',
                'age':18
            },
            {
                'name':'alice',
                'age':20
            }
        ]
    },
    {
        date:'2-1-2016',
        users:[
            {
                'name':'james',
                'age':18
            },
            {
                'name':'alice',
                'age':20
            },
            {
                'name':'xiaomi',
                'age':29
            }
        ]
    }
]

我有效地批量更新对象数组。

我对单个集合进行更新的初始解决方案是

Users.update({date:'1-1-2016','user.name':'james'},{'$set':'users.$.age':5}})

因此,这将根据日期和用户的名称将詹姆斯的年龄从18岁更新为5岁。

但如何批量更新,说明了一系列日期?使用上面的查询循环?我觉得它效率不高。需要指导。

1 个答案:

答案 0 :(得分:2)

您可以使用$gte / $gt$lte / $lt来匹配日期范围:

db.users.update({
    date: {
        $gte: '1-1-2016',
        $lt: '31-1-2016'
    },
    'users.name': 'james'
}, { '$set': { 'users.$.age': 10 } }, { 'multi': true })

使用许多条件name / age进行批量更新:

var data = [{ "name": "james", "age": 10 }, { "name": "alice", "age": 11 }];

var query = [];

for (var i = 0; i < data.length; i++) {

    query.push({
        updateMany: {
            "filter": {
                date: {
                    $gte: '1-1-2016',
                    $lt: '31-1-2016'
                },
                'users.name': data[i].name
            },
            "update": { '$set': { 'users.$.age': data[i].age } }
        }
    })
}

db.users.bulkWrite(query);