Mongo基于数组索引更新

时间:2014-08-15 19:49:32

标签: mongodb

我的数据库中有一个人员列表,每个人都是一个文档。我想给他们标准的名字(这只是为了演示目的 - 我不在乎谁知道哪个名字只要它的独特之处。)

我有一系列的名字给他们,但我不知道如何在Mongo中这样做。一种简单的方法是只有一个游标并逐个更新文档,但这似乎效率低下。有更好的方法吗?

编辑:

示例db:

{id: 1234, age: 50}
{id: 1235, age: 40}
{id: 1236, age: 30}

姓名:

['Bob', 'Jill', 'Gina']

所需的最终状态:

{id: 1234, age: 50, name: 'Bob'}
{id: 1235, age: 40, name: 'Jill'}
{id: 1236, age: 30, name: 'Gina'}

1 个答案:

答案 0 :(得分:1)

我不确定你是如何指定哪些名称与_id一起使用的,所以我假设你有一个以下列形式指定的映射:

> nameMapping
[{ "_id" : 1234, "name" : "Bob" }, { "_id" : 1235, "name" : "Jill" }, { "_id" : 1236, "name" : "Gina" }]

然后,使用名称更新每个文档的好方法是使用批量操作。驱动程序支持批量操作,但我将在mongo shell中提供bulk.find.update()的示例,该版本从MongoDB 2.6开始提供。

> var bulk = db.people.initializeUnorderedBulkOp()
> nameMapping.forEach(function(pair) {
    bulk.find( { "_id" : pair._id } ).update( { $set: { "name" : pair.name } } )
})
> bulk.execute()