如果我们尝试插入类似的记录,如何更新db中的记录?

时间:2016-12-30 06:47:10

标签: mongodb

  

如果我们尝试插入类似的记录,则该记录不应该是   插入而不是需要更新

     

这是我的查询

db.cos.insert({'subject':'A','batch': '2004','section':'A','cos':[{'code':1,'desc': '1 d','pos': {'po1': 3,'po2': 3.5,'po3': 0,'po4': 2,'po5': 3}}] });
  

执行此查询后,如果我尝试执行,则会插入一个数据   这个查询再次,它不应该被保存而不是它应该   更新

2 个答案:

答案 0 :(得分:0)

您需要文档的唯一ID,然后才能使用db.cos.save(yourDocument)进行更新。

https://docs.mongodb.com/manual/reference/method/db.collection.save/

如果您没有提供唯一ID,或者找不到提供的密钥,则会创建一个新文档。

db.cos.save({
    _id: 'hello',
    data: 'world'
});
// a new document will be created:
// {_id: 'hello', data: 'world'}

db.cos.save({
    _id: 'hello',
    data: 'world 2'
});
// the same document will be updated:
// {_id: 'hello', data: 'world2'}

db.cos.save({
    _id: 'hello2',
    data: 'world'
});
// another document will be created:
// {_id: 'hello', data: 'world2'}
// {_id: 'hello2', data: 'world'}

db.cos.save({
    data: 'world3'
});
// another document will be created:
// {_id: 'hello', data: 'world2'}
// {_id: 'hello2', data: 'world'}
// {_id: ObjectID(1), data: 'world'}

答案 1 :(得分:0)

使用{upsert:true}

db.cos.update({someQueryToFindDocument}, {'subject':'A','batch': '2004','section':'A','cos':[{'code':1,'desc': '1 d','pos': {'po1': 3,'po2': 3.5,'po3': 0,'po4': 2,'po5': 3}}] }, {upsert:true});

如果根据cos集合中的查询没有匹配文档,那么它将插入,否则它将更新。