Как поместить элементы массива как каждый во вложенный массив в mongodb, используя nodejs - PullRequest
0 голосов
/ 01 сентября 2018

Я хочу выдвинуть элементы массива, поскольку каждый из вложенных массивов в mongodb код, который я использую, таков:

$push:{
    "websites.$.ads":{
        "ad_type":{"$each":["320x40","480x30"]}
    }
}

У меня есть следующий дизайн схемы:

_id:KLNkl23klmKLM233mKLM233
websites:[     
    {  
        _id:"xyz"  
        ads:[ 
            ad_type:""  
        ]   
    },
    {  
        _id:"xyz"  
        ads:[ 
            ad_type:""  
        ]   
    }
]                                     

В конце я хочу получить

{   
  "_id" : ObjectId("some id"),   
  "websites" : [  
             { 
                 "ads" : [ 
                     { _id:"asdfasdf" , "ad_type" : "some value" },
                     { _id:"asdfasdf" , "ad_type" : "some value" },
                     { _id:"asdfasdf" , "ad_type" : "some value" }  
                 ] 
             } 
   ] 
 }

1 Ответ

0 голосов
/ 02 сентября 2018

Вы можете использовать позиционный аргумент обновления массива. Я попробовал ниже синтаксис, чтобы заставить его работать, и вывод ниже

db.coll.update({}, {
    $push: {
        'websites.$[].ads': {
            $each: [{
                    _id: 'some_id',
                    ad_type: 'some value'
                }
            ]
        }
    }
})

OUTPUT

{
        "_id": ObjectId("SOME_MAIN_ID"),
        "websites": [{
                "ads": [{
                        "_id": "some_id",
                        "ad_type": "some value"
                    }, {
                        "_id": "some_id_1",
                        "ad_type": "some value_1"
                    }
                ]
            }
        ]
    }

РЕДАКТИРОВАНИЕ Для замены массивов

db.coll.update({}, {
    $set: {
        'websites.$[].ads': [{
                _id: 'some_id_1',
                ad_type: 'some value_1'
            }
        ]
    }
})
WriteResult({
    "nMatched": 1,
    "nUpserted": 0,
    "nModified": 1
})
db.coll.find() {
    "_id": 'SOME_MAIN_ID',
    "websites": [{
            "ads": [{
                    "_id": "some_id_1",
                    "ad_type": "some value_1"
                }
            ]
        }
    ]
}
db.coll.update({}, {
    $set: {
        ' websites.$[].ads ': [{
                _id: ' some_id_1 ',
                ad_type: ' some value_1 '
            }, {
                _id: ' some_other_id_2 ',
                ad_type: ' some_other_type '
            }
        ]
    }
})

WriteResult({
    "nMatched": 1,
    "nUpserted": 0,
    "nModified": 1
})
db.coll.find() {
    "_id": 'SOME_MAIN_ID',
    "websites": [{
            "ads": [{
                    "_id": "some_id_1",
                    "ad_type": "some value_1"
                }, {
                    "_id": "some_other_id_2",
                    "ad_type": "some_other_type"
                }
            ]
        }
    ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...