MongoDB, Objekt aus Array entfernen


87

Doc:

{
   _id: 5150a1199fac0e6910000002,
   name: 'some name,
   items: [{
      id: 23,
      name: 'item name 23'
   },{
      id: 24,
      name: 'item name 24'
   }]
}

Gibt es eine Möglichkeit, ein bestimmtes Objekt aus einem Array zu ziehen? IE, wie ziehe ich das gesamte Elementobjekt mit der ID 23 aus dem Elementarray.

Ich habe versucht:

db.mycollection.update({'_id': ObjectId("5150a1199fac0e6910000002")}, {$pull: {id: 23}});

Ich bin mir jedoch ziemlich sicher, dass ich 'pull' nicht richtig verwende. Soweit ich weiß, wird durch Ziehen ein Feld aus einem Array gezogen, aber kein Objekt.

Irgendwelche Ideen, wie man das gesamte Objekt aus dem Array zieht.

Als Bonus versuche ich dies in Mungo / Nodejs zu tun, auch nicht sicher, ob diese Art von Dingen in der Mungo-API enthalten ist, aber ich konnte sie nicht finden.



Ja, das ist es. Vielen Dank!
Verlorene Übersetzung

Antworten:


146

Versuchen..

db.mycollection.update(
    {'_id': ObjectId("5150a1199fac0e6910000002")}, 
    { $pull: { "items" : { id: 23 } } },
false,
true 
);

Ja, meine Syntax war falsch. Vielen Dank! Auch ohne die Aufregung und Multi-Optionen versucht und das hat auch funktioniert.
Verlorene Übersetzung

12
Was sind diese booleschen Werte?
Nicolas Del Valle

1
@NicolasDelValle Wenn ich mich richtig erinnere, waren dies Optionen upsertund multi. Aktuelle Syntax und Dokumentation finden Sie unter folgendem Link: docs.mongodb.com/manual/reference/method/db.collection.update
Lukas Liesis

7

Ich habe ein Dokument wie

Geben Sie hier die Bildbeschreibung ein

Ich muss die Adresse aus dem Adressfeld löschen

Nachdem ich im Internet viel gesucht hatte, fand ich die Lösung

Customer.findOneAndUpdate(query, {$pull: {address: addressId}}, function(err, data){
        if(err) {
          return res.status(500).json({'error' : 'error in deleting address'});
        }

        res.json(data);

      });

Wie geht das in MongoDB CLI?
Ragesh D Antony

5
my database:->
        {
       "_id" : ObjectId("5806056dce046557874d3ab18"),
       "data" : [ 
           {
               "id" : 1
           }, 
           {
               "id" : 2
           }, 
           {
               "id" : 3
           }
       ]
    }

MY QUERY:->
db.getCollection('play_table').update({},{$pull:{"data":{"id":3}}},{multi:true}
OutPut:->
{
  "_id" : ObjectId("5806056dce046557874d3ab18"),
       "data" : [ 
           {
               "id" : 1
           }, 
           {
               "id" : 2
           }
       ]
    }

4

Sie können es auch versuchen:

db.getCollection('docs').update({ },{'$pull':{ 'items':{'id': 3 }}},{multi:true})

3

Für einen einzelnen Datensatz im Array:

db.getCollection('documents').update(
    { },
    {'$pull':{ 'items':{'mobile': 1234567890 }}},
    {new:true}
);

Für mehrere Datensätze mit derselben Handynummer im Array:

db.getCollection('documents').update(
    { },
    {'$pull':{ 'items':{'mobile': 1234567890 }}},
    {new:true,multi:true}
)

1

Verwenden Sie $pulldiese Option , um die Daten zu entfernen

return this.mobiledashboardModel
.update({"_id": args.dashboardId}, { $pull: {"viewData": { "_id": widgetId}}})
.exec()
.then(dashboardDoc => {
     return {
        result: dashboardDoc
     }
});

0

Kishore Diyyana:

Wenn Sie alle Elemente einschließlich des Schlüssels der Elementattributliste entfernen möchten. Hier ist das Beispiel eines nicht gesetzten mongoDB-Operators:

db.UM_PREAUTH_CASE.update ({'Id': 123}, {$ unset: {dataElements: ""}})

JSON Sieht so aus:

{"Id": 123, "dataElements": [{"createdBy": "Kishore Babu Diyyana", "createdByUserId": 2020}, {"createdBy": "Diyyana Kishore", "createdByUserId": 2021}]}

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.