原子查询-仅当没有其他具有相同键的文档时才添加新文档

时间:2019-10-30 08:27:23

标签: mongodb mongodb-query

我有包含文档的数据库,每个文档具有以下结构:

{ 
 name: "name1",
 group: "group1",
 source: "source1",
 context: "context1"
}

仅当没有其他具有相同名称和组(组和名称是键)的文档时,我才想添加新文档。 如何使用这种条件创建单个查询,该查询首先检查条件,然后将新文档添加到集合中?

1 个答案:

答案 0 :(得分:1)

您可以尝试另一种方法:在“名称”和“组”上创建唯一索引。

官方文档中的唯一索引:https://docs.mongodb.com/manual/core/index-unique/

在命令外壳中运行此命令:

  

db.your_collection.createIndex({“ name”:1,“ group”:1},{unique:true})       {           “ createdCollectionAutomatically”:否,           “ numIndexesBefore”:1,           “ numIndexesAfter”:2,           “好”:1       }

当您尝试插入具有相同数据的另一个文档时,会收到错误消息,并且不会插入数据:

> db.your_collection.insert({ name: "name1",group: "group1",source: "source1",context: "context1"})
WriteResult({
    "nInserted" : 0,
    "writeError" : {
        "code" : 11000,
        "errmsg" : "E11000 duplicate key error collection: test.some index: name_1_group_1 dup key: { : \"name1\", : \"group1\" }"
    }
})

对于MongoDb> 2.4字节为findAndModify:https://docs.mongodb.com/manual/reference/method/db.collection.findAndModify/