Я хочу обновить поля во вложенном массиве в mongodb - PullRequest
1 голос
/ 09 мая 2020

вот мой документ:

{
"_id": {
    "$oid": "5eb5f0a9d985888edb0523b0"
},
"subs": [{
    "name": "list1",
    "count": "0"
}, {
    "name": "list2",
    "count": "0"
}, {
    "name": "list3",
    "count": "0"
}, {
    "name": "list4",
    "count": "0"
}]
}

Сейчас я использую mon gojs. Я хотел бы, например, найти "list2" и увеличить счетчик, связанный с ним. Я пытался весь день и, кажется, не могу понять этого.

Любая помощь или направление были бы очень признательны!

Ответы [ 2 ]

0 голосов
/ 09 мая 2020
{
"_id": {
    "$oid": "5eb5f0a9d985888edb0523b0"
},
"subs": [{
    "name": "list1",
    "count": 0
}, {
    "name": "list2",
    "count": 0
}, {
    "name": "list3",
    "count": 0
}, {
    "name": "list4",
    "count": 0
}]
}

Ответ не основан на mon gojs, но приведенный ниже синтаксис должен вам помочь.

db.collection.updateOne(({"subs.name":"list2"},{$inc:{"subs.$.count":1}})

Убедитесь, что ваш счет int32 не является строкой. "Count": 0 не "Count":"0"

0 голосов
/ 09 мая 2020

Надеюсь, это вам поможет. Я использую программный c подход для решения вашей проблемы.

let payload = {
"_id": {
    "$oid": "5eb5f0a9d985888edb0523b0"
},
"subs": [{
    "name": "list1",
    "count": "0"
}, {
    "name": "list2",
    "count": "0"
}, {
    "name": "list3",
    "count": "0"
}, {
    "name": "list4",
    "count": "0"
}]
}

let fields = ["list2","list4"];

fields.forEach((element)=>{
    for(let i=0; i<payload.subs.length; i++){
         if(element===payload.subs[i]["name"]){
            let value = parseInt(payload.subs[i]["count"]);
            payload.subs[i]["count"] = (++value).toString();
         }
    }
})

console.log(payload.subs)
...