我有一个带有嵌套对象的集合,当前集合存储的对象中没有该对象的_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中进行类似的更新?
答案 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(项目) })