MongoDB新的ObjectId超过数组给我所有的相同ID

时间:2019-01-15 01:04:55

标签: mongodb aggregation-framework

我正在尝试使用唯一的ObjectId更新数组中的项目(这意味着向缺少它们的数组对象添加对象ID)

如果我的收藏夹中有一系列衬衫对象,请尝试以下方法:

db.people.update({        
    $and : [
        _id: ObjectId('5eeb44c6a042791d28a8641f'),
        {
            $or: [
            { 'shirts._id': { $eq:null } },
            { 'shirts._id':{ $exists:false } }
            ]
        }           
    ]
},{ 
    $set: { 'shirts.$[]._id': new ObjectId() }
},{
    "multi" : true
}

);

它为每个数组元素生成IDENTICAL ObjectsID,但是我要在其上放置一个唯一的索引,但是用例可能不会看到数组中超过2-3个项目,边缘情况达到5-6,这似乎是一种滥用索引

如何使用唯一的ObjectId更新多个记录或多个数组对象?

1 个答案:

答案 0 :(得分:0)

使用$set时,是在告诉mongo为所有匹配的元素设置该值。如果数组中的元素已经定义为架构,则mongo将自动为每个元素发布新的ObjectId。

或者,您可以使用forEach并遍历每个匹配的元素,以创建新的ObjectId。