如何在MongDB中将嵌套文档更新或插入到数组中

esteban21

我在mongodb中很陌生,所以这是我的问题,我想要的是检查主文档是否存在,然后检查是否存在,检查嵌套文档是否存在,然后更新它,以及是否不插入新文档。但是使用此代码,我只能更新一个现有的嵌套文档,而不能创建一个新的嵌套文档。我什至不知道这种方法是否正确使用,是否有效?

collection.find_one_and_update(
 {"_id:{"field1":val1,"field2":val2,"field3":val3,"field4":val4}},
 {"$set":{"elements.$[element].prop2":valToUpdate}},
 return_document=ReturnDocument.AFTER, 
 array_filters=[{"element.prop1":valToCheck}],
 upsert=True
)

在mongo语法中,我认为是这样的:

db.collection.findOneAndUpdate(
   {"_id:{"field1":val1,"field2":val2,"field3":val3,"field4":val4}},
   {"$set":{"elements.$[element].prop2":valToUpdate}},
   { arrayFilters: [ {"element.prop1":valToCheck} ] }
)

我是否可以使用像这样的一个函数来完成整个过程(检查主文档和嵌套文档是否存在以及是否更新,否则创建一个新函数)?

我要如何更改文档的示例:

在执行方法之前

{
   "_id":{"name":"Storename","location":"somewhere","phone":46284723},
   "books":
      [
         {"name":"somebook","price":{"$numberDouble":"34"}}
      ]
}

执行后是否有嵌套文档

{
   "_id":{"name":"Storename","location":"somewhere","phone":46284723},
   "books":
      [
         {"name":"somebook","price":{"$numberDouble":"55"}},
      ]
}

执行后,如果没有嵌套的文档

{
   "_id":{"name":"Storename","location":"somewhere","phone":46284723},
   "books":
      [
         {"name":"somebook","price":{"$numberDouble":"34"}},

         {"name":"someOTHERbook","price":{"$numberDouble":"45"}}
      ]
}
谁-假面真灵魂

那是因为upsert似乎不能与$运算符一起使用,而且一般来说,upsert在文档级别,但是不应该用于插入缺少数组的元素,例如这种情况。由于实际文档存在于数据库中,因此将出现重复错误_id

如果要在一个数据库调用中执行此操作,则以下查询应适用于您的方案,因为在任何给定情况下,只有一个updateOne应更新数组:

Mongo查询:

db.yourCollectionName.bulkWrite([
    {
        updateOne: {
            filter: {
                "_id": {
                    "name": "Storename",
                    "location": "somewhere",
                    "phone": 46284723
                }, 'books.name': 'somebook'
            }, update: {
                $set: { "books.$.price": 100 }
            }
        }
    },
    {
        updateOne: {
            filter: {
                "_id": {
                    "name": "Storename",
                    "location": "somewhere",
                    "phone": 46284723,
                }
            }, update: {
                $addToSet: { 'books': { 'name': 'somebook', "price": 100 } }
            }
       }
 }])

Python代码:

import pymongo
from pymongo import UpdateOne

bulkArr = [
    UpdateOne({
        "_id": {
            "name": "Storename",
            "location": "somewhere",
            "phone": 46284723
        }, 'books.name': 'somebook'
    }, { '$set': { "books.$.price": 100 } }),
    UpdateOne({
        "_id": {
            "name": "Storename",
            "location": "somewhere",
            "phone": 46284723,
        }
    }, {
        $addToSet: { 'books': { 'name': 'somebook', "price": 100 } }
       })
   ]

db.yourCollectionName.bulk_write(bulkArr)

PyMongo参考:请确实参考此链接来转换此查询。PyMongo-bulk_write

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在elasticsearch中更新数组内的嵌套文档

来自分类Dev

如何在javascript中将多个函数插入到数组中

来自分类Dev

如何在Golang中将$ push到嵌套数组中?

来自分类Dev

如何在Firestore中的嵌套文档中更新嵌套文档?

来自分类Dev

如何在子文档的嵌套数组中更新子文档

来自分类Dev

如何在嵌套数组中更新一个文档

来自分类Dev

如何在java中将一行插入到二维数组中?

来自分类Dev

如何使用批量操作更新mongdb中的文档?

来自分类Dev

如何在MongoDB中查找并插入子文档数组列表?

来自分类Dev

如何在MongoDB中查找并插入子文档数组列表?

来自分类Dev

如何在Excel中将列堆叠并插入到行中?

来自分类Dev

ElasticSearch:更新数组中的嵌套文档

来自分类Dev

ElasticSearch:更新数组中的嵌套文档

来自分类Dev

多个嵌套文档中的MongoDB更新数组

来自分类Dev

在MongoDB中更新嵌套数组文档

来自分类Dev

如何在MongoDB中更新嵌套数组中的数据

来自分类Dev

如何在mongdb中自定义数组

来自分类Dev

如何在python中将坐标存储到数组中?

来自分类Dev

如何在 JS 中将键值搜索到多维数组中?

来自分类Dev

如何在MondoDB中多重更新嵌套数组?

来自分类Dev

如何在mongoDB或Mongoose中更新嵌套数组的值

来自分类Dev

如何在Scala中更新嵌套的JSON数组

来自分类Dev

如何在MondoDB中多重更新嵌套数组?

来自分类Dev

如何在嵌套数组中实现多字段更新

来自分类Dev

如何在单个插入语句中将多个插入到..select查询中?

来自分类Dev

如何在React / Javascript中将“指针”存储到嵌套树中的嵌套节点?

来自分类Dev

如何在 MySQL 中将每个表的插入或更新镜像到另一个表?

来自分类Dev

如何在C#中将文本从RTF插入Word文档

来自分类Dev

如何在嵌套文档中查找记录?

Related 相关文章

  1. 1

    如何在elasticsearch中更新数组内的嵌套文档

  2. 2

    如何在javascript中将多个函数插入到数组中

  3. 3

    如何在Golang中将$ push到嵌套数组中?

  4. 4

    如何在Firestore中的嵌套文档中更新嵌套文档?

  5. 5

    如何在子文档的嵌套数组中更新子文档

  6. 6

    如何在嵌套数组中更新一个文档

  7. 7

    如何在java中将一行插入到二维数组中?

  8. 8

    如何使用批量操作更新mongdb中的文档?

  9. 9

    如何在MongoDB中查找并插入子文档数组列表?

  10. 10

    如何在MongoDB中查找并插入子文档数组列表?

  11. 11

    如何在Excel中将列堆叠并插入到行中?

  12. 12

    ElasticSearch:更新数组中的嵌套文档

  13. 13

    ElasticSearch:更新数组中的嵌套文档

  14. 14

    多个嵌套文档中的MongoDB更新数组

  15. 15

    在MongoDB中更新嵌套数组文档

  16. 16

    如何在MongoDB中更新嵌套数组中的数据

  17. 17

    如何在mongdb中自定义数组

  18. 18

    如何在python中将坐标存储到数组中?

  19. 19

    如何在 JS 中将键值搜索到多维数组中?

  20. 20

    如何在MondoDB中多重更新嵌套数组?

  21. 21

    如何在mongoDB或Mongoose中更新嵌套数组的值

  22. 22

    如何在Scala中更新嵌套的JSON数组

  23. 23

    如何在MondoDB中多重更新嵌套数组?

  24. 24

    如何在嵌套数组中实现多字段更新

  25. 25

    如何在单个插入语句中将多个插入到..select查询中?

  26. 26

    如何在React / Javascript中将“指针”存储到嵌套树中的嵌套节点?

  27. 27

    如何在 MySQL 中将每个表的插入或更新镜像到另一个表?

  28. 28

    如何在C#中将文本从RTF插入Word文档

  29. 29

    如何在嵌套文档中查找记录?

热门标签

归档