Versuchen Sie, diese
Durch die Bezugnahme Ihr Beispielschema, es ist Array von Dokumenten von Benutzer-ID
Verwenden Sie $unwind, um die Dokumente aus Array zu trennen und die Dokumente nach u filtern sing gegeben user_id und dessen Wert ist negativ.
Beispieldokument
{
"_id" : ObjectId("582032556772b7cb0ff85721"),
"userArray" : [
{
"user_id" : "1",
"name" : "aaaa",
"value" : -10
},
{
"user_id" : "2",
"name" : "bbbb",
"value" : 30
},
{
"user_id" : "1",
"name" : "aaaa",
"value" : 310
},
{
"user_id" : "2",
"name" : "bbbb",
"value" : -15
},
{
"user_id" : "1",
"name" : "aaaa",
"value" : -100
},
{
"user_id" : "3",
"name" : "cccc",
"value" : 390
}
]
}
db.collection.aggregate([{$unwind:"userArray"}]);
Das Ergebnis der Abwickelvorrichtung auf dem oberen Daten
{
"_id" : ObjectId("582032556772b7cb0ff85721"),
"userArray" : {
"user_id" : "1",
"name" : "aaaa",
"value" : -10
}
}
{
"_id" : ObjectId("582032556772b7cb0ff85721"),
"userArray" : {
"user_id" : "2",
"name" : "bbbb",
"value" : 30
}
}
{
"_id" : ObjectId("582032556772b7cb0ff85721"),
"userArray" : {
"user_id" : "1",
"name" : "aaaa",
"value" : 310
}
}
{
"_id" : ObjectId("582032556772b7cb0ff85721"),
"userArray" : {
"user_id" : "2",
"name" : "bbbb",
"value" : -15
}
}
{
"_id" : ObjectId("582032556772b7cb0ff85721"),
"userArray" : {
"user_id" : "1",
"name" : "aaaa",
"value" : -100
}
}
{
"_id" : ObjectId("582032556772b7cb0ff85721"),
"userArray" : {
"user_id" : "3",
"name" : "cccc",
"value" : 390
}
}
wenden dann die Bedingung sein würde, dass User_id ist und der Wert negativ ist. Hierfür können wir $match zusammen mit $and verwenden (da wir zwei Bedingungen Wert und ID haben)
db.collection.aggregate([{$unwind:"$userArray"}, {$match:{$and: [{"userArray.value":{$lte:0}}, {"userArray.user_id":"1"}]}} ]);
für user_id: 1 das Abfrageergebnis ist
{
"_id" : ObjectId("582032556772b7cb0ff85721"),
"userArray" : {
"user_id" : "1",
"name" : "aaaa",
"value" : -10
}
}
{
"_id" : ObjectId("582032556772b7cb0ff85721"),
"userArray" : {
"user_id" : "1",
"name" : "aaaa",
"value" : -100
}
}
Mit diesem Ergebnis haben Sie es iterieren in Ihre Serviceebene und arbeiten Sie an den anderen gewünschten Ergebnissen.
Hoffe es hilft!
Bitte versuchen Sie es * User.find ({user_id: '1', Wert: {$ lt: 1}}) * –