2012-01-16 67 views
0

我抓我的頭幾個小時,想不通我怎麼可以price.amountMongoDB的查詢子集合的嵌入對象

{ 
    "_id" : ObjectId("4f148bb56858c43428f0666b"), 
    "Date" : new Date("Sat, 13 Sep 2014 00:42:29 GMT +04:00"), 
    "Items" : [{ 
     "ProductId" : ObjectId("4f14873f6858c42ce82968e6"), 
     "Quantity" : 5, 
     "Price" : { 
     "Amount" : "4929", 
     "Currency" : "USD" 
     } 
    },  }, { 
     "ProductId" : ObjectId("4f14873f6858c42ce829692b"), 
     "Quantity" : 10, 
     "Price" : { 
     "Amount" : "140", 
     "Currency" : "USD" 
     } 
    }], 
    "CustomerId" : ObjectId("4f1487f16858c419c04ec2e2") 
} 

查詢以下文件我要選擇具有所有對象分鐘1例如,數量> 10的價格項目。

感謝

回答

2
> db.objects.find({'Items.Price.Amount':{$gt:"10"}}).pretty() 
{ 
     "_id" : ObjectId("4f148bb56858c43428f0666b"), 
     "Date" : ISODate("2014-09-12T20:42:29Z"), 
     "Items" : [ 
       { 
         "ProductId" : ObjectId("4f14873f6858c42ce82968e6"), 
         "Quantity" : 5, 
         "Price" : { 
           "Amount" : "4929", 
           "Currency" : "USD" 
         } 
       }, 
       { 
         "ProductId" : ObjectId("4f14873f6858c42ce829692b"), 
         "Quantity" : 10, 
         "Price" : { 
           "Amount" : "140", 
           "Currency" : "USD" 
         } 
       } 
     ], 
     "CustomerId" : ObjectId("4f1487f16858c419c04ec2e2") 
} 

你的「數量」字段類型的字符串(這我假設是錯誤的)。因此,您需要與示例查詢中顯示的字符串值進行比較。如果你真的想比較整數,這顯然會產生相當不可預知的結果。如果是這樣,請將查詢中的「金額」字段和$ gt值轉換爲數字。

+0

謝謝雷蒙,我已經試過,但沒有工作。這就是爲什麼我在這裏問::) – Davita 2012-01-16 11:07:07

+0

它肯定是善意的先生;)。什麼是不工作呢?您知道您的「金額」值是字符串嗎? – 2012-01-16 11:14:16

+0

嗯,我沒有注意到它是字符串。可能這是問題的原因。但是,怎麼會發生這種情況?我使用了最新的.NET驅動程序,並且Price類的Amount屬性是十進制...:S無論如何,您給我的查詢不會返回任何結果。我會嘗試手動添加新對象,並讓您知道結果。再次感謝:) – Davita 2012-01-16 11:19:36

2

.NET MongoDB驅動程序將Decimal類型序列化爲字符串。這樣,當從MongoDB讀取Decimal時,它可以存儲Decimal,而不會丟失任何精度/數據。

選擇另一種數字類型將解決您的問題。