我正在尝试使用唯一的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更新多个记录或多个数组对象?
答案 0 :(得分:0)
使用$set
时,是在告诉mongo为所有匹配的元素设置该值。如果数组中的元素已经定义为架构,则mongo将自动为每个元素发布新的ObjectId。
或者,您可以使用forEach并遍历每个匹配的元素,以创建新的ObjectId。