mongodb如何在给定数组中用_id upsert对象



我这样的命令:

db.item.remove()    
db.item.update({_id:{$in:['A1','A2']}},{$inc:{count:1}},{multi: true, upsert: true})

我所需的结果应该是

db.item.find() -->
{_id: 'A1', count: 1}
{_id: 'A2', count: 1}

但实际上是:

{_id: ObjectId(xxx), count: 1}
{_id: ObjectId(xxx), count: 1}

似乎UpSert无法自动使用查询递质中的val作为新文档的_id,有没有办法实现我的目标?

您一次只能上升一个文档,因此您需要将其拆分为两个update调用。

db.item.update({_id: 'A1'},{$inc:{count:1}},{upsert: true})
db.item.update({_id: 'A2'},{$inc:{count:1}},{upsert: true})

这取决于文档是否已经存在。如果不这样做,那么您始终可以使用BatchInsert,其中最新的MongoDB中已委派给insert函数:http://docs.mongodb.org/manual/applications/create/create/#insert

如果将文档数组传递给insert()方法,则insert()在集合中执行批量插入。

使得Copuld是一种方法,但是您的文档是如此之小,您从一个命令中完成这一切的唯一真正的好处是您获得一次往返,但是您必须通过电线将所有数据发送同时。

我还应该注意,在碎片下进行批处理插入更改,并且有某些考虑,您可能应该考虑:http://docs.mongodb.org/manual/administration/sharding/sharding/#strategies-for-bulk-interts-for-bulk-interts - 由于性能影响大量插入物可能会对您的系统产生影响。

,如果文档可能已经存在,那么唯一的唯一方法就是像@johnnyhk所说的那样手动执行命令。我不认为任何其他工具(例如mongoimport)会在这里为您提供帮助。

最新更新