Ich habe eine unter Struktur in einer Beispielkollektion verwaltet.MongoDB-Filter für bestimmte Daten in Array und nur bestimmte Felder in der Ausgabe
{
"_id": "1",
"name": "Stock1",
"description": "Test Stock",
"lines": [
{
"lineNumber": "1",
"priceInfo": {
"buyprice": 10,
"sellprice": 15
},
"item": {
"id": "BAT10001",
"name": "CricketBat",
"description": "Cricket bat"
},
"quantity": 10
},
{
"lineNumber": "2",
"priceInfo": {
"buyprice": 10,
"sellprice": 15
},
"item": {
"id": "BAT10002",
"name": "CricketBall",
"description": "Cricket ball"
},
"quantity": 10
},
{
"lineNumber": "3",
"priceInfo": {
"buyprice": 10,
"sellprice": 15
},
"item": {
"id": "BAT10003",
"name": "CricketStumps",
"description": "Cricket stumps"
},
"quantity": 10
}
]
}
ich ein Szenario, wo ich lineNumber
und item.id
gegeben wird, muss ich die obige Sammlung filtern, basierend auf lineNumber
und item.id
und ich brauche nur ausgewählte Felder zu projizieren.
Erwartete Ausgabe unter:
{
"_id": "1",
"lines": [
{
"lineNumber": "1",
"item": {
"id": "BAT10001",
"name": "CricketBat",
"description": "Cricket bat"
},
"quantity": 10
}
]
}
Hinweis: ich nicht lineNumber
alle Zeiten erhalten kann, wenn lineNumber
null ist, dann sollte ich allein für item.id
filtern und erhalten die oben output.The Hauptzweck erwähnt ist um die Anzahl der Felder in der Ausgabe zu reduzieren, da erwartet wird, dass die Sammlung eine große Anzahl von Feldern enthält.
habe ich versucht, die unter Abfrage,
db.sample.aggregate([
{ "$match" : { "_id" : "1"} ,
{ "$project" : { "lines" : { "$filter" : { "input" : "$lines" , "as" : "line" , "cond" :
{ "$and" : [ { "$eq" : [ "$$line.lineNumber" , "3"]} , { "$eq" : [ "$$line.item.id" , "BAT10001"]}]}}}}}
])
Aber ich habe alle Felder, ich bin die erforderlichen Felder nicht in der Lage auszuschließen oder zu schließen.
ich die obige Abfrage versucht, es nicht für die Zeilennummer Matching arbeitet, ist es, alle Zeilennummern bringt obwohl ich die Zeilennummer zur Verfügung stellen als 1 – vasantharajan
Können Sie mir eine Beispieldaten und Ihre Abfrage, die fehlgeschlagen ist, zur Verfügung stellen? Da die aktuelle Abfrage ordnungsgemäß mit den Beispieldaten aus der Frage funktioniert. Oder vielleicht verstehe ich nicht, was Sie wollen :( – Neodan
@vasantharajan Ich aktualisierte meine Antwort, ich hoffe, es wird helfen, besser zu verstehen, was diese Abfrage tut. – Neodan