2017-07-27 4 views
0

Ich benutze Mungo-Datenbank für eine meiner Chat-Anwendung für die Geschichte und Update wie UI.Abfrage Updates Falscher Eintrag in Array

Ich habe Objekt in der Datenbank folgen.

{ 
"_id" : ObjectId("5979dbd157634341fc8cb03a"), 
"count" : 3, 
"room_status" : true, 
"room_id" : "s7d8a9s7d8a90sd", 
"users" : [ 
    { 
     "user_status" : true, 
     "user_id" : 1501158353821 
    }, 
    { 
     "user_id" : 1501158361890, 
     "user_status" : true 
    }, 
    { 
     "user_id" : 1501158369102, 
     "user_status" : true 
    } 
], 
"__v" : 0 
} 

Von Anfrage nehme ich Daten {room_id: "s7d8a9s7d8a90sd", "user_id":1501158361890 }. Nach room_id und user_id muss ich Objekt wie, user_status : false und count increased by -1 aktualisieren.

HINWEIS: Wenn user_status bereits falsch als keine Notwendigkeit Zahl zu verringern, indem 1.

Ich habe versucht, mit Follow-Abfrage lassen Sie mich furthure Option wissen.

room.update({ 
    "room_id": req.body.room_id, 
    "users.user_id": req.body.user_id, 
    'users.user_status': true 
}, { 
    '$set': { 
     'users.$.user_status': false 
    }, 
    '$inc': { count: -1 } 
}, function(err, resData) { 
    if (err) { 

    } else { 

    } 
}); 

Ich möchte eine Ausgabe wie

{ 
"_id" : ObjectId("5979dbd157634341fc8cb03a"), 
"count" : 2, 
"room_status" : true, 
"room_id" : "s7d8a9s7d8a90sd", 
"users" : [ 
    { 
     "user_status" : true, 
     "user_id" : 1501158353821 
    }, 
    { 
     "user_id" : 1501158361890, 
     "user_status" : false 
    }, 
    { 
     "user_id" : 1501158369102, 
     "user_status" : true 
    } 
], 
"__v" : 0 
} 
+1

das sein sollte 'room.update ({ "room_id": req.body.room_id "Benutzer": { "$ elemMatch": "user_id": req.body. user_id, "user_status ': true}}, ....' Da ohne '$ elemMatch'' 'users.user_status" 'mit" jeder "Array-Position übereinstimmen kann, verwenden Sie' $ elemMatch', also die "Kombination" von –

Antwort

0

ich Antwort. Aber bitte kann jemand erklären Unterschied zwischen oben genannten Abfrage und .

    room.update({ 
         "room_id": req.body.room_id, 
         "users":{ 
          $elemMatch : { 
           "user_id": parseInt(req.body.user_id), 
           "user_status" : true 
          } 
         } 
        }, { 
         '$set': { 
          'users.$.user_status': false 
         }, 
         '$inc': { count: -1 } 
        }, function(err, resData) { 
         if (err) { 
          return res.status(500).send({ status: false, message: "Error Occour to Processing Database" }); 
         } else { 
          result[0]['presenter'] = false; 
          return res.status(200).send({ status: true, message: "User left Successfully", data: result[0] }); 
         } 
        }); 

- Dank

+0

Kauf verstehst du warum? Oder hast du gerade gelesen, als in einer vorhandenen Antwort? –

+0

Nein, bitte können Sie mir in Antwort erklären. –

+0

Lesen Sie den obigen Kommentar und schauen Sie sich auch die Dokumentation für '$ elemMatch' an . –

Verwandte Themen