Inserting data to nested array in mongodb

后端 未结 3 603
青春惊慌失措
青春惊慌失措 2020-12-07 00:24

I have a document which looks like this

{
 _id:1,
 list_id:23,
 name:\'list01\'
 cards:[
  {
   id:3,
   name:\'card01\'
   categories:[{
    id:10,
    categ         


        
相关标签:
3条回答
  • 2020-12-07 00:33

    In short, it is not possible.

    Nested Arrays

    The positional $ operator cannot be used for queries which traverse more than one array, such as queries that traverse arrays nested within other arrays, because the replacement for the $ placeholder is a single value

    https://docs.mongodb.com/manual/reference/operator/update/positional/

    However, you may want to try $[]

    Nested Arrays The filtered positional operator $[] can be used for queries which traverse more than one array and nested arrays.

    For an example, see Update Nested Arrays in Conjunction with $[].

    https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/#position-nested-arrays-filtered

    0 讨论(0)
  • 2020-12-07 00:49

    You can use $[identifier]

    db.collection.update({
      "list_id": 23,
      "cards.categories.category": "section01"
    },
    {
      $push: {
        "cards.$.categories.$[elem].tags": {
          name: "tag02",
          id: uuidv4(),
          is_selected: true
        }
      }
    },
    {
      arrayFilters: [
        {
          "elem.category": "section01"
        }
      ],
      multi: true
    })
    

    try it here

    0 讨论(0)
  • 2020-12-07 00:57

    You can not use multiple $ positional, for your case you can use single positional and arrayFilters,

    The filtered positional operator $[<identifier>] identifies the array elements that match the arrayFilters conditions for an update operation,

    db.collection(TABLE).updateOne({
      list_id: 23,
      "cards.categories.category": "section01"
    },
    {
      $push: {
        "cards.$.categories.$[elem].tags": {
          name: "tag02",
          id: uuidv4(),
          is_selected: true
        }
      }
    },
    {
      arrayFilters: [
        { "elem.category": "section01" }
      ]
    })
    

    Playground

    0 讨论(0)
提交回复
热议问题