24

现在我得到两个集合:coll01coll02.

而coll01的结构是这样的:

{
  id: 01,
  name: "xxx",
  age: 30
}

coll02 的结构如下:

{
  id: 01,
  name: "XYZ"
  gender: "male"
}

两个集合中的两个 id 字段都是索引。并且这两个集合中的文档数量相同。

我想在传统 SQL 中做的是:

update coll01, coll02
set coll01.name = coll02.name
where coll01.id = coll02.id
4

1 回答 1

41

Mongodb 不是关系数据库,不支持连接。所以,你应该想一想,你真的需要 mongodb 来满足你的目的吗?

coll01更新解决方案:您可以从循环中更新每个文档:

db.coll01.find().forEach(function (doc1) {
    var doc2 = db.coll02.findOne({ id: doc1.id }, { name: 1 });
    if (doc2 != null) {
        doc1.name = doc2.name;
        db.coll01.save(doc1);
    }
});

集合中id字段的索引将减少循环内的操作执行时间。另外,请参阅服务器端 JavaScript 执行:Running .js files via a mongo shell Instance on the Servercoll02find()

于 2013-11-06T21:50:01.990 回答