【问题标题】:MongoDB new ObjectId over array giving me same Id for allMongoDB new ObjectId over array 为所有人提供相同的 ID
【发布时间】:2019-01-15 01:04:55
【问题描述】:

我正在尝试使用唯一的 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 更新多个记录或多个数组对象?

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:

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

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

    【讨论】:

    • 你能给个forEach的例子吗
    • 看到您更新的查询,您为什么要这样做?如果你让 Mongo 知道嵌套对象是模式,Mongo 可以自动填充 _ids。
    • 已有数据 - 我想更正 - 这些对象没有 ID
    猜你喜欢
    • 2019-10-29
    • 1970-01-01
    • 2015-08-14
    • 2022-12-31
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 2020-11-15
    相关资源
    最近更新 更多