2017-12-29 3 views
0

Ich habe einen Datensatz wie diesekann nicht unter Array-Wert auf dem Objekt setzen

{ 
    "_id" : ObjectId("5a45f6da3e6de20efc61ecc8"), 
    "userid" : "5a20eb5bcdacc7086ce77427", 
    "test" : [ 
     { 
      "sid" : "5a20ec53cdacc7086ce7742b", 
      "sname" : "dev", 
      "activity" : "Message", 
      "isread" : 0, 
      "timestamp" : 1514535070925 
     }, 
     { 
      "sid" : "5a20ec53cdacc7086ce7742b", 
      "sname" : "dev", 
      "activity" : "Message", 
      "isread" : 0, 
      "timestamp" : 1514535356213 
     } 
    ], 
    "__v" : 0 
} 

Jetzt bin ich nicht in der Lage, die ‚isread‘ Wert von 0 bis 1 zu ändern Was ich schreibe ist:

db.Collection.update({'userid': req.body.userid, 'notifications.timestamp': '1514535356213'}, {$set:{'isread': parseInt(1)}}, {new: true}, function(error, result) { 
         if(error) { 
          console.log(error); 
         } else { 
          console.log(result); 
          //I am getting this result i.e { 
                  "ok": 0, 
                  "n": 0, 
                  "nModified": 0 
                  } 
         } 
        }); 

Ich weiß nicht, warum mein Wert nicht aktualisiert wird. jede Hilfe ist

geschätzt
+0

Ich bemerkte, dass Sie - notifications.timestamp in Ihrer Abfrage verwenden ?? – Avij

+0

Hatten Sie Probleme? – Avij

+0

Versuchen Sie 'db.Collection.update ({'Benutzer-ID': req.body.userid, 'test.timestamp': 1514535356213}, {'$ set': {'test. $. Isread': 1}}, {' neu ': true}, Rückruf) ' – chridam

Antwort

1

> db.coll3.update({ 
    'userid': '5a20eb5bcdacc7086ce77427' 
}, { 
    $set: { 
     'test.$[elem].isread': 1 
    } 
}, { 
    multi: true, 
    new: true, 
    arrayFilters: [{ 
      'elem.timestamp': { 
       $eq: 1514535356213 
      } 
     } 
    ] 
}) 
WriteResult({ 
    "nMatched": 1, 
    "nUpserted": 0, 
    "nModified": 1 
}) 

Mit findAndModify

db.coll3.findAndModify({query:{ 
    'userid': '5a20eb5bcdacc7086ce77427' 
}, update:{ 
    $set: { 
     'test.$[elem].isread': 1 
    } 
}, 
    new: true, 
    arrayFilters: [{ 
      'elem.timestamp': { 
       $eq: 1514535356213 
      } 
     } 
    ] 
}) 

Es Versuchen gibt verschiedene Möglichkeiten, diese Art von Operationen zu tun. Hoffe, das hilft

Verwandte Themen