mongodb插入只有id的文档,或者什么都不做

时间:2016-02-15 18:31:40

标签: java mongodb

我有一个网络域名数据库,数据如下:

{"_id": "es.wikipedia.org"}
{"_id": "en.wikipedia.org"}

我想(尝试)插入可能已经在集合中的域名,如“stackoverflow.com”或“es.wikipedia.org”,因此如果文档不在数据库中,请插入,但如果它是,然后只是跳过,什么都不做。但我不能在一次手术中做到这一点。如果我一起去

 collection.insert(new Document("_id", "es.wikipedia.org"));

如果文档已存在于集合中,则它会失败并出现异常。如果我尝试更新,就像这样:

 collection.updateOne(new Document("_id", "es.wikipedia.org"), new Document("$set", new Document()), new UpdateOptions().upsert(true));

它失败,因为$set字段为空。但它只是一个列表,它(目前)没有比“_id”更多的字段。有没有办法做到这一点?我犯了错误吗?

2 个答案:

答案 0 :(得分:0)

您需要查明具有该ID的记录是否存在DB,然后您可以进行进一步处理。

var res = db.user.find({"_id": "es.wikipedia.org"});

if(res.length()){

  db.user.insert({"_id": "es.wikipedia.org"});

}

答案 1 :(得分:0)

如果您使用的是2.6或更高版本的MongoDB版本,请使用insert()方法,并将ordered选项设置为false。将选项设置为false将导致尝试插入带有重复键的文档时出现异常,但是要插入的其余文档将继续被处理(并插入,如果它们不是重复的。)请参阅此文章:

https://docs.mongodb.org/manual/reference/method/db.collection.insert/

...并注意关于无序插入的部分。

如果您使用的是MongoDB版本3.2.x,则还可以使用insertMany()方法执行文档数组的无序插入。将ordered选项设置为false将导致尝试插入具有重复键的文档的异常,但阵列中的所有新文档都将添加到集合中。看到这篇文章:

https://docs.mongodb.org/manual/reference/method/db.collection.insertMany/

...并注意关于无序插入的部分。