#arrays #mongodb #mongoose
#массивы #mongodb #мангуст
Вопрос:
В моей базе данных MongoDB у меня есть коллекция «produits» с такими документами
{
"_id": {
"$oid": "6048e97b4a5f000096007505"
},
"modeles": [
{
"id": "OppoA3",
"pieces": [
{
"id": "OppoA3avn"
},
{
"id": "OppoA3bat"
}]
]
},
{
"id": "OppoA1",
"pieces": [
{
"id": "OppoA1avn",
},
{
"id": "OppoA1batt",
}
]
}
]
}
Как я могу удалить все modeles.pieces из всех моих документов.
Мне удалось удалить с помощью фильтра на modeles.id но с этим кодом, но не во всей коллекции
db.produits.update(
{marque_id:'OPPO', 'modeles.id':'RENOZ'},
{$set:
{
'modeles.$.pieces': []
}
}
, { multi : true }
)
Я бы хотел, чтобы все документы, подобные этому, наконец
{
"_id": {
"$oid": "6048e97b4a5f000096007505"
},
"modeles": [
{
"id": "OppoA3",
"pieces": []
},
{
"id": "OppoA1",
"pieces": []
}
]
}
Спасибо за вашу помощь.
Ответ №1:
Я выполнил цикл javascript, подобный этому, но я думаю, что это не лучшая практика
async removePieces(){
var doc
try {
doc = await produitModel.find()
for (var produit of doc) {
for (var modele of produit.modeles) {
const filter = {'marque_id': produit.marque_id, 'modeles.id': modele.id}
const set = {
$set: {
'modeles.$.pieces': []
}
}
await db.collection('produits').updateOne(filter, set)
}
}
console.log('removePieces() ==> Terminé')
} catch(err) {
console.log(err)
}
}
Ответ №2:
db.produits.update({
modeles: {//This is because your second document will create failure otherwise
$exists: true
}
},
{
$set: {
"modeles.$.pieces": []
}
},
{
multi: true
})
Комментарии:
1. Я пытался, но это невозможно
Error : The positional operator did not find the match needed from the query.
2. конечно, вам просто нужно сбросить его в пустой массив. Протестируйте эту логику, убедившись, что она соответствует вашим потребностям.
3. Ошибка еще не произошла
"code" : 28, "errmsg" : "Cannot create field 'pieces' in element {modeles: [
4. Пожалуйста, добавьте некоторые пояснения к вашему ответу, чтобы другие могли извлечь из него уроки
5. Я обновляю свой вопрос редактирования, потому что мой примерный документ был плохо отформатирован