查找文档是否唯一

时间:2014-07-18 16:51:34

标签: mongodb mongodb-query

我在MongoDB中查询3个集合,然后通过从3个独立集合的文档中获取一些字段来创建新文档。例如:我从第一个集合中取字段'A',从第二个字段中取字段'B',从第三个字段取字段'C'。

使用它们我正在创建一个像

这样的json文档
var uploadDoc = {
                   'A' : <value of A>,
                   'B' : <value of B>,
                   'C' : <value of C>,
                }

此uploadDoc正在上传到另一个集合。

问题:我希望只上传不同的uploadDoc值。默认情况下,MongoDB为每个uploadDoc提供唯一的ID。如果之前未插入具有相同A,B和C值的其他文档,如何将uplodDoc插入集合?

我使用javascript查询集合并创建文档。

2 个答案:

答案 0 :(得分:0)

有两种方法很简单:

  1. 使用&#34; upserts&#34;

    db.collection.update(uploadDoc,uploadDoc,{ "upsert": true })
    
  2. 使用唯一索引

    db.collection.ensureIndex({ "A": 1, "B": 1, "C": 1 },{ "unique": true });
    db.collection.insert(uploadDoc); // Same thing fails :(
    
  3. 两者都有效。选择一个。

答案 1 :(得分:0)

您应该使用唯一索引:doc

你不应该在没有唯一索引的情况下使用upsert:

  

为避免多次插入同一文档,如果查询字段具有唯一索引,则只能使用 upsert:true

因为

  

考虑多个客户端何时同时使用upsert参数发出以下更新:

[切割]

  

如果所有update()操作在任何客户端成功插入数据之前完成查询部分,并且名称字段上没有唯一索引,则每次更新操作都可能导致插入。

from here