mongoDB,更新相关集合中的对象

时间:2018-11-29 19:05:18

标签: mongodb

我有一个带有嵌套对象的集合,当前集合存储的对象中没有该对象的_id。所以现在我有1000多个带有嵌套对象的记录。

我有一个主查询集合,这些嵌套对象来自这些集合。

所以数据看起来像这样:

{
    _id:
    name:
    thing: {
        family:
        type:
    }
}

主“物”数据如下所示:

{
    _id:
    family:
    type:
}

我想做的是收集所有带有“事物”数据的文档,其中包含_id,这样我得到的数据将如下所示:

{
    _id:
    name:
    thing: {
        _id: (from the Things collection)
        family:
        type:
    }
}

如果我在SQL中执行此操作,则它将看起来像这样:

UPDATE collection
SET 
    thing_id = (
        SELECT _id
        FROM Things
        WHERE family = thing_family
        AND type = thing_type
    ) 

如何在MongoDB中进行类似的更新?

2 个答案:

答案 0 :(得分:0)

MongoDB更新方法无法做到这一点。相反,您必须使用显示的@mickl这样的聚合来完成此操作,或者使用代码来完成。

这是在JS中执行此操作的示例(低效)方法:

db.MainCollection.find({}).forEach(function(item){
var thing = db.ThingCollection.findOne({"family": item.thing.family});
item.thing._id = thing._id; 

db.MainCollection.save(item) });

但是,您现在在两个不同的集合中有冗余数据。我会重新考虑您的存储方式,这样就不必彼此保持同步。

答案 1 :(得分:0)

做类似的事情     db.collection.find({})。forEach(function(item){         item.thing._id = db.things.findOne({family:item.thing.family,type:item.thing.type})._ id         db.collection.save(项目)    })