Ich möchte Produkte nach IDs anzeigen (56e641d4864e5b780bb992c6
und 56e65504a323ee0812e511f2
) und den Preis nach Abzug durch Rabatt anzeigen, falls verfügbar.
Ich kann den Endpreis zählt Aggregat verwenden, aber diese Rückkehr alle Dokumente in einer Sammlung, wie es nur den Spiele-IDs
"_id" : ObjectId("56e641d4864e5b780bb992c6"),
"title" : "Keyboard",
"discount" : NumberInt(10),
"price" : NumberInt(1000)
"_id" : ObjectId("56e65504a323ee0812e511f2"),
"title" : "Mouse",
"discount" : NumberInt(0),
"price" : NumberInt(1000)
"_id" : ObjectId("56d90714a48d2eb40cc601a5"),
"title" : "Speaker",
"discount" : NumberInt(10),
"price" : NumberInt(1000)
das ist meine Abfrage
productModel.aggregate([
{
$project: {
title : 1,
price: {
$cond: {
if: {$gt: ["$discount", 0]}, then: {$subtract: ["$price", {$divide: [{$multiply: ["$price", "$discount"]}, 100]}]}, else: "$price"
}
}
}
}
], function(err, docs){
if (err){
console.log(err)
}else{
console.log(docs)
}
})
zurückkehren zu machen und wenn ich diese $in
Abfrage hinzufügen, gibt es leere Array
productModel.aggregate([
{
$match: {_id: {$in: ids}}
},
{
$project: {
title : 1,
price: {
$cond: {
if: {$gt: ["$discount", 0]}, then: {$subtract: ["$price", {$divide: [{$multiply: ["$price", "$discount"]}, 100]}]}, else: "$price"
}
}
}
}
], function(err, docs){
if (err){
console.log(err)
}else{
console.log(docs)
}
})
Das ist es, es funktioniert jetzt. aber normalerweise werfe ich die ID als String in findOneAndUpdate oder andere Abfrage, und es funktioniert gut, ist das Problem nur in Aggregat geschehen? –
@MuhammadFasalirRahman Dies ist genau, was ich mit beantwortet habe. Ein '.find()' kann das 'Schema' verwenden, das natürlich einen Standardtyp von' ObjectId' für das '_id' Feld hat. Aggregations-Pipelines ** ** verwenden ** nicht das Schema, wie ich eigentlich schon erklärt habe. –
Dies funktioniert nicht in Mungo 5 –