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.

verlorene Übersetzung
quelle
1
Hast du das versucht? stackoverflow.com/questions/9048424/…
Myrne Stol
Ja, das ist es. Vielen Dank!
Verlorene Übersetzung

Antworten:

146

Versuchen..

db.mycollection.update(
    {'_id': ObjectId("5150a1199fac0e6910000002")}, 
    { $pull: { "items" : { id: 23 } } },
false,
true 
);
Sambomartin
quelle
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);

      });
Deepak Sisodiya
quelle
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
           }
       ]
    }
Virales Patel
quelle
4

Sie können es auch versuchen:

db.getCollection('docs').update({ },{'$pull':{ 'items':{'id': 3 }}},{multi:true})
Shubham Verma
quelle
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}
)
Chandrakesha Rao
quelle
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
     }
});
KARTHIKEYAN.A
quelle
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}]}

Kishore BABU Diyyana
quelle