更新猫鼬中的数组对象元素的数组

时间:2019-08-26 07:57:39

标签: mongodb

我有如下所示的架构数据

import (
    "github.com/mattn/go-sqlite3"
)

if err != nil {
    if sqlite3Err, ok := err.(*sqlite3.Error); ok {
        if sqlite3Err.Code == sqlite3.ErrConstraint && sqlite3Err.ExtendedCode == 1555 {
            // SQLITE3 ERROR 1555 : PRIMARY KEY CONSTRAINT ERROR
            return errors.New("Log Error")
        }
    }

我正尝试通过以下方式更新设备

{
    id:'5d60fd38f6999a7792c940a4'
    name:'test',
    department:[
        {
            d_name:'Rd',
            _id:'5d61092b1f234c11348eb831'
            equipements:[
                {
                    id:'5d637abd7ddd183263fa4ebc'
                    e_name:'first'
                },
            ]
        }
    ]
}

但不幸的是,该查询没有更新我的设备数据。 可以让我知道正确的更新方法。谢谢

2 个答案:

答案 0 :(得分:0)

您需要使用equipements.id搜索才能扩展name

这可以工作

College.updateOne({
  _id: productObjectID,
  "department._id": variantObjectId,
  "department.equipements.id": equipementId
},{ "$set": {"department.equipements.$.name": "updatedName"} });

答案 1 :(得分:0)

我认为您正在尝试实现以下目标:

db.dummyTest.updateOne({ "_id" : ObjectId("5d63a1791b761bfc0420e590"), 
"department._id": "5d61092b1f234c11348eb831", 
"department.equipements._id": "5d637abd7ddd183263fa4ebc"  },
{ $set: { "department.$.equipements.0.e_name.0": "Update to last" }})

MongoDB对更新嵌套数组的支持很差。因此,如果您需要经常更新数据,则最好避免使用它们

方法1:将department设为自己的集合(将部门设为子文档而不是数组)

选项2:通过计划实现