Mongodb 基于数组索引的Mongo更新

Mongodb 基于数组索引的Mongo更新,mongodb,Mongodb,我的数据库中有一个人员列表,每个人都是一个文档。我想给他们标准的名字(这只是为了演示的目的-我不在乎谁得到哪个名字,只要它是唯一的) 我有一系列的名字给他们,但我不知道如何在Mongo做到这一点。一种简单的方法是只使用一个游标并逐个更新文档,但这似乎效率低下。有更好的方法吗 编辑: 示例数据库: {id: 1234, age: 50} {id: 1235, age: 40} {id: 1236, age: 30} 姓名: ['Bob', 'Jill', 'Gina'] 所需的最终状态: {i

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

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

编辑:

示例数据库:

{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'}

我不确定您是如何指定哪些名称与哪个
\u id
相匹配的,因此我假设您有一个以下形式指定的映射:

> nameMapping
[{ "_id" : 1234, "name" : "Bob" }, { "_id" : 1235, "name" : "Jill" }, { "_id" : 1236, "name" : "Gina" }]
然后,使用批量操作更新每个具有名称的文档是一个好方法。驱动程序支持批量操作,但我将在MongoShell with中给出示例,该示例从MongoDB 2.6开始提供

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

你能发布一些更多的信息,比如收集结构,以便我们对这个问题有更清晰的认识吗?@RobertChristopher:请参阅更新