arrays - MongoDB 更新数组元素

标签 arrays mongodb push insert-update

我有这样的文档结构

{
    "_id" : ObjectId("52263922f5ebf05115bf550e"),
    "Fields" : [
        {
            "Field" : "Lot No",
            "Rules" : [ ]
        },
        {
            "Field" : "RMA No",
            "Rules" : [ ]
        }
    ]
}

我尝试通过使用以下代码插入将保存对象的规则数组来进行更新。

db.test.update({
    "Fields.Field":{$in:["Lot No"]}
}, {
    $addToSet: {
        "Fields.Field.$.Rules": {
            "item_name": "my_item_two",
            "price": 1
        }
    }
}, false, true);

但是我得到以下错误:

can't append to array using string field name [Field]

如何进行更新?

最佳答案

你对那个通配符 $ 搞得太深了。您匹配 Fields 数组中的一个项目,因此您可以访问它,使用:Fields.$。此表达式返回 Fields 数组中的第一个匹配项,因此您可以通过 Fields.$.FieldFields.$.Result 访问其字段。

现在,让我们更新 update:

db.test.update({
    "Fields.Field": "Lot No"
}, {
    $addToSet: {
        "Fields.$.Rules": {
            'item_name': "my_item_two",
            'price':1
        }
    }
}, false, true);

请注意,我已经缩短了 query,因为它等于您的表达式。

关于arrays - MongoDB 更新数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18600791/

相关文章:

arrays - 用单个数字替换向量中的整数序列

python - 在 Python 中从相同长度的列表中添加值

ruby-on-rails - 如何从父模型类调用 before_save 方法?

javascript - 使用push方法向对象添加条件

c - 查找数组中的重复项

mongodb - 为什么我应该在 MongoDB 中保留默认的 _id?

mongodb - 创建索引后的第一个查询很慢

apple-push-notifications - CloudKit 正在限制来自 CKQuerySubscription 的推送通知的数量

css - 将页脚始终保持在 Canvas 导航下方

Javascript:检查元素是否在二维数组中的快速方法?