2017-01-17 2 views
-2

Ich habe eine Sammlung, die aus einigen Strings, Objekten und einem Array besteht. Innerhalb dieses Arrays befinden sich mehrere Objekte. Ich versuche, alle Aufträge mit der Objekt-ID von ObjectId ("587ec66e5ed5cb0061092dbe") zu entfernen. Siehe unten für das Schema und die zugehörigen Daten. Ich habe alles unter der Sonne versucht.Ein bestimmtes Objekt in einem Array finden mongoDB

var campgroundSchema = new mongoose.Schema({ 
    name: String, 
    image: String, 
    description: String, 
    price: String, 
    author: { 
     id: { 
     type: mongoose.Schema.Types.ObjectId, 
     ref: "User" 
     }, 
     username: String 
    }, 
    orders: [ 
     { 
     type: mongoose.Schema.Types.ObjectId, 
     ref: "Order" 
     } 
    ] 
}); 

Unten sind Beispieldaten.

{ 
    "_id" : ObjectId("587ec65e5ed5cb0061092dbd"), 
    "name" : "is Forrest Cool?", 
    "price" : "", 
    "image" : "https://dsafd.com", 
    "description" : "", 
    "orders" : 
    [ 
     ObjectId("587ec66e5ed5cb0061092dbe"), 
     ObjectId("587ec6bc5ed5cb0061092dc0"), 
     ObjectId("587ec6c05ed5cb0061092dc2"), 
     ObjectId("587ec7178f628931610636dc"), 
     ObjectId("587ec71e8f628931610636de") 
    ], 
    "author" : { "id" : ObjectId("587ec6145ed5cb0061092dbc"), 
    "username" : "forrest" }, 
    "__v" : 18 
} 

Vielen Dank.

Antwort

0

Um das spezifische Element mit bestimmten ObjectId innerhalb orders Array zu finden, können Sie $in verwenden.

Try this:

//orderObjectId is the object id you want to find inside orders. 
Campground.find({orders : {$in : [orderObjectId]}},{'orders.$':1},function(err,result){ 
... 
}); 

'orders.$':1 nur das Element aus Aufträgen Array zurück

Um diese bestimmten Reihenfolge zu löschen,

//_id is optional, you can query using orderID also. 
Campground.update({ 
    _id :someObjectId, orders : {$in : [orderObjectId]} 
},{ 
    $pull : {order : orderObjectId} 
},function(err,result){ 
        ... 
}); 

Update: Accroding zu Ihrem Kommentar, es scheint, dass Sie haben konfrontiert Problem damit.

starten:

//if you are receiving orderId as string, convert string to ObjectId 
var orderId = mongoose.Schema.Types.ObjectId("587d78b8e898d1e732b3888a"); 

Campground.find({"orders": {$in : [orderId]}},function(err, result){ 
    if(err){ 
     console.log(err); 
    } else { 
     console.log("FOUND RESULT: " + result); 
    } 
}); 

Hoffnung, das hilft.

+0

Danke, Ravi. Aber ich kann es immer noch nicht herausfinden. Wie du sehen kannst, bin ich brandneu bei node/js/mongo. Können Sie etwas bereitstellen, das ich einfach kopieren und in meinen Code einfügen kann, um zu sehen, ob das hilft. Ich suche nach der Reihenfolge, die die Objekt-ID von "587d78b8e898d1e732b3888a" hat. – FDRH

+0

Was ist das Problem, vor dem Sie stehen? –

+0

Campground.find ({ "orders._id": "587d78b8e898d1e732b3888a"}, Funktion (err, Ergebnis) { if (err) { console.log (err); } else { console.log ("FOUND RESULT : "+ Ergebnis); } }); – FDRH

Verwandte Themen