4

我的命令是这样的:

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,有没有办法达到我的目的?

4

2 回答 2

2

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

db.item.update({_id: 'A1'},{$inc:{count:1}},{upsert: true})
db.item.update({_id: 'A2'},{$inc:{count:1}},{upsert: true})
于 2012-12-21T05:23:53.123 回答
0

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

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

因此,这可能是一种方法,但是您的文档非常小,您从一个命令中执行此操作的唯一真正好处是您可以获得一次往返,但您必须同时通过线路发送所有数据.

我还应该注意,在分片下批量插入更改,您可能应该考虑某些注意事项:http: //docs.mongodb.org/manual/administration/sharding/#strategies-for-bulk-inserts-in- sharded-clusters由于批量插入可能对您的系统产生的性能影响。

但是,如果文档可能已经存在,那么 atm 唯一真正的方法就是像@JohnnyHK 所说的那样手动执行命令。我认为 MongoDB 中的任何其他工具mongoimport都不会在这里为您提供帮助,因为它们也可以进行批量插入。

于 2012-12-21T08:13:36.107 回答