2016-04-06 4 views
-2
{ 
    "_id":ObjectId("570404d3b4aefafb2d975e49"), 
    "timeStamp":NumberLong(1459881168860), 
    "activityMessages":null, 
    "oldLocation":null, 
    "changeType":"ContainerCreated", 
    "userId":"naveen", 
    "newLocation":"L1-500", 
    "itemHistory":[ 
     { 
     "userId":null, 
     "timeStamp":null, 
     "oldLocation":null, 
     "newLocation":null, 
     "changeType":"ItemAdded", 
     "activityMessages":null, 
     "itemNumber":325136, 
     "purchCompanyId":1003, 
     "poNum":"100", 
     "oldQty":NumberLong(0), 
     "newQty":NumberLong(100), 
     "inventoryStatus":"Received" 
     }, 
     { 
     "userId":null, 
     "timeStamp":null, 
     "oldLocation":null, 
     "newLocation":null, 
     "changeType":"ItemAdded", 
     "activityMessages":null, 
     "itemNumber":325136, 
     "purchCompanyId":1003, 
     "poNum":"100", 
     "oldQty":NumberLong(0), 
     "newQty":NumberLong(2000), 
     "inventoryStatus":"Frozen" 
     }, 
     { 
     "userId":null, 
     "timeStamp":null, 
     "oldLocation":null, 
     "newLocation":null, 
     "changeType":"ItemAdded", 
     "activityMessages":null, 
     "itemNumber":88888, 
     "purchCompanyId":1003, 
     "poNum":"101", 
     "oldQty":NumberLong(0), 
     "newQty":NumberLong(200), 
     "inventoryStatus":"Claims" 
     } 
    } 

Dies ist mein typisches Mongo-Dokument. Auf der Abfrage für eine bestimmte Artikelnummer in einem bestimmten Zeitstempel Bereich mit der Abfrage:Nicht in der Lage, Mongo-Ergebnis korrekt für Array innerhalb eines Dokuments zu holen

{ "timeStamp" : { "$gte" : 0 , "$lte" : 1459933945543} , "itemHistory.itemNumber" : 325136} 

Ich erhalte die richtige Antwort! Bei der Suche nach der itemNumber 88888 erhalte ich jedoch keine Antwort auf dieselbe Abfrage.

{ "timeStamp" : { "$gte" : 0 , "$lte" : 1459933945543} , "itemHistory.itemNumber" : 88888} 

Die folgende Abfrage funktioniert gut:

{ "timeStamp" : { "$gte" : 0 , "$lte" : 1459933945543} , "itemHistory" : {"$elemMatch":{"itemNumber":112}}} 

Antwort:

Fetched 0 records 

Das hat mich gemacht fragen, ob nur das erste Element des Arrays innerhalb eines Dokuments auf dem Pflücken wird während die Abfragebedingungen übereinstimmen. Ich habe eine Menge anderer Fragen ausprobiert, nichts scheint zu funktionieren.

Ich brauche das gesamte Dokument, das zurückgegeben wird, die die angegebene itemNumber enthält!

TIA

+0

Dies ist ein garantierter Tippfehler in Ihrem echten Code. Überprüfen Sie es erneut. Es ist kein Fehler oder so etwas. Sie haben einfach einen Feldnamen oder eine Sammlung oder etwas falsch eingegeben. Kann nicht reproduzieren. Die zweite hier angegebene Abfrage entspricht genau dem Dokument. –

+0

{"timeStamp": {"$ gte": 0, "$ lte": 1459933945543}, "itemHistory": {"$ elemMatch": {"itemNumber": 112}}} Diese Abfrage funktioniert. Es gibt keinen Tippfehler. – Tanvi

+0

'{" timeStamp ": {" $ gte ": 0," $ lte ": 1459933945543}," itemHistory.itemNumber ": 88888}' funktioniert perfekt auf den Daten, die Sie in dieser Frage dargestellt haben. Ich weiß, weil ich das Dokument in eine Sammlung kopiert und dann die Abfrage ausgeführt habe. Sie brauchen nur ** jemals $ elemMatch, wenn Sie zwei oder mehr Bedingungen für Eigenschaften in einem Array erfüllen müssen. Das ist es und nichts anderes. –

Antwort

0

Ich habe beiden Arten von Abfragen mit ausgeführt und ohne elemMatch und beide geholt korrekte Ergebnisse.

db.collection.find({ 
    "timeStamp" : { "$gte" : 0 , "$lte" : 1459933945543} , 
    "itemHistory.itemNumber" : 88888 
}) 

db.collection.find({ 
    "timeStamp" : { "$gte" : 0 , "$lte" : 1459933945543} , 
    "itemHistory" :{$elemMatch:{itemNumber: 88888}} 
}) 

Ergebnis (Full Dokument der Kürze halber weggelassen):

{ 
    "_id" : ObjectId("570500508eb3259244949d82"), 
    "timeStamp" : 1459881168860, 
    "activityMessages" : null, 
    "oldLocation" : null, 
    "changeType" : "ContainerCreated", 
    "userId" : "naveen", 
    "newLocation" : "L1-500", 
    "itemHistory" : [ 
     { 
      "userId" : null, 
      "timeStamp" : null, 
      "oldLocation" : null, 
      "newLocation" : null, 
      "changeType" : "ItemAdded", 
      "activityMessages" : null, 
      "itemNumber" : 88888.0, 
      "purchCompanyId" : 1003.0, 
      "poNum" : "101", 
      "oldQty" : 0, 
      "newQty" : 200, 
      "inventoryStatus" : "Claims" 
     }, 
     ... 
    ] 
} 
Verwandte Themen