Arrays 如何在mongodb中更新或插入数组子文档中的多个对象?

Arrays 如何在mongodb中更新或插入数组子文档中的多个对象?,arrays,mongodb,Arrays,Mongodb,我使用的文档模型如下所示 { "_id" : "a301c595-f6f3-4ede-91c5-f1cabd548338", "UserName" : "3@3.com", "Revision" : 6, "UserVocabs" : [ { "Vocab" : "apple", "LearnStatus" : 0, "lastChanged" : 213232

我使用的文档模型如下所示

{
    "_id" : "a301c595-f6f3-4ede-91c5-f1cabd548338",
    "UserName" : "3@3.com",
    "Revision" : 6,
    "UserVocabs" : [
        {
            "Vocab" : "apple",
            "LearnStatus" : 0,
            "lastChanged" : 213232
        },
        {
            "Vocab" : "book",
            "LearnStatus" : 0,
            "lastChanged" : 213132
        },
    ]
}

我正试图通过它们的Vocab字段添加或替换UserVocabs数组中的对象,所以我不知道它们的索引。到目前为止,我使用的唯一解决方案是首先提取对象,然后尝试将其更新版本推回到数组中。但它需要为每个对象更新2个查询。有更好的解决方案吗?

您可以通过其索引来更新数组中的一个元素

 db.test.update({"_id": "a301c595-f6f3-4ede-91c5-f1cabd548338"},{$set:{"UserVocabs.1.Vocab":"orange"}})
或者,如果要修改所有元素,可以将
1
替换为
$
,这是任意索引的通配符。(您可能需要设置最后两个参数标记才能实现此功能)

并且可以使用

 db.test.update({"_id": "a301c595-f6f3-4ede-91c5-f1cabd548338"},{$addToSet:{"UserVocabs":{"key1":"value1","key2":"value2"}}})
可移除的元素可参考

如果要使用array的值查找要替换的元素,可以:

db.test.update({"UserVocabs.Vocab": "apple"},{$set:{"UserVocabs.$.Vocab":"orange"}})

我使用的索引是vocab名称(“vocab”:“apple”)。我会更新的question@alizx如果对象在至少一个字段中不同,请检查第二种方法添加的编辑器。我唯一需要检查的字段是vocab字段