2016-04-06 19 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" 
     } 
    } 

Bu, normal Mongo belgesimdir. sorgusu ile verilen bir zaman damgası aralığında belirli bir öğe numarası için sorgulama Açık:Bir belge içinde dizi için doğru mongo sonucunu bulamıyor

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

Doğru yanıtı alıyorum! Ancak itemNumber 88888 için arama yaparken aynı sorgu için yanıt alamıyorum.

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

şu sorgu sadece çalışıyor:

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

Yanıt:

Fetched 0 records 

Bu belgenin içindeki dizinin sadece ilk eleman aldı olup olmadığını merak beni yapmıştır sorgu koşullarını eşleştirirken. Bir sürü başka soruyu denedim, hiçbir şey işe yaramıyor gibi görünüyor.

Verilen itemNumber! Öğesini içeren iade edilecek belgenin tamamına ihtiyacım var!

TIA

+0

Bu gerçek kodunda bir garanti yazım hatası olduğunu. Tekrar kontrol et. Bu bir hata ya da bunun gibi bir şey değil. Sadece bir alan adı veya koleksiyonu veya yanlış bir şey yazmış olacaksınız. Çoğaltamıyor. Burada verilen ikinci sorgu, belgenin olması gerektiği gibi eşleşir. –

+0

{"timeStamp": {"$ gte": 0, "$ lte": 1459933945543}, "itemHistory": {"$ elemMatch": {"itemNumber": 112}}} bu sorgu çalışır. Yazım hatası yok. – Tanvi

+0

'{" timeStamp ": {" $ gte ": 0," $ lte ": 1459933945543}," itemHistory.itemNumber ": 88888}', bu soruda sunduğunuz veriler üzerinde mükemmel çalışır. Biliyorum, çünkü belgeyi bir koleksiyona kopyaladım ve sorguyu çalıştırdım. Bir dizideki özelliklerde "iki veya daha fazla koşulu" eşleştirmeniz gerektiğinde, yalnızca ** hiç ** elemMatch'e ihtiyacınız var. Bu kullanım ve başka bir şey değil. –

cevap

0

Birlikte ve elemMatch ve her iki getirilen doğru sonuç olmadan sorguları her iki tür çalıştırdık. (Tam belge kısalık için atlanırsa)

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

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

Sonuç:

{ 
    "_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" 
     }, 
     ... 
    ] 
} 
İlgili konular