Mongodb 查找文档是否唯一
我在MongoDB中查询3个集合,然后通过从3个单独集合的文档中获取一些字段来创建一个新文档。例如:我从第一个集合中提取字段“A”,从第二个集合中提取字段“B”,从第三个集合中提取字段“C” 使用它们,我创建了一个json文档,如Mongodb 查找文档是否唯一,mongodb,mongodb-query,Mongodb,Mongodb Query,我在MongoDB中查询3个集合,然后通过从3个单独集合的文档中获取一些字段来创建一个新文档。例如:我从第一个集合中提取字段“A”,从第二个集合中提取字段“B”,从第三个集合中提取字段“C” 使用它们,我创建了一个json文档,如 var uploadDoc = { 'A' : <value of A>, 'B' : <value of B>, 'C' : &
var uploadDoc = {
'A' : <value of A>,
'B' : <value of B>,
'C' : <value of C>,
}
var uploadDoc={
“A”:,
“B”:,
“C”:,
}
此上载文档正在上载到另一个集合
问题:我只想上传uploadDoc的不同值。默认情况下,MongoDB为每个uploadDoc提供一个唯一的id。只有在以前没有插入具有相同a、B和C值的另一个文档时,我如何向集合插入uplodDoc
s
我正在使用javascript查询集合并创建文档。有两种方法很简单:
db.collection.update(uploadDoc,uploadDoc,{“upsert”:true})
db.collection.ensureIndex({“A”:1,“B”:1,“C”:1},{“unique”:true});
db.collection.insert(uploadDoc);//同样的事情失败了:(
两者都有效。选择一个。您应该使用唯一索引: 如果没有唯一索引,则不应使用upsert: 为避免多次插入同一文档,仅当查询字段被唯一索引时才使用upsert:true 因为 考虑当多个客户端同时使用upsert参数发出以下更新时: [剪辑] 如果在任何客户端成功插入数据之前,所有update()操作都完成了查询部分,并且名称字段上没有唯一索引,则每个更新操作都可能导致插入
@displayName第一种方法是查找符合条件的文档并尝试更新它。如果没有任何更改,则MongoDB不会真正执行任何操作。如果找不到该文档,则会创建一个新文档。所有这些都在手册页面中进行了说明。