2012-01-16 6 views
0
私は数時間のために私の頭を悩まていると私は私が持っているすべてのオブジェクトを選択したいprice.amount

MongoDBのクエリ子コレクションの埋め込みオブジェクト

{ 
    "_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") 
} 

により、以下の文書を照会することができる方法を見つけ出すことはできません

min 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

ありがとうRemon、私はすでにそれを試みましたが、うまくいきませんでした。だからこそ私はここに求めているのです:) – Davita

+0

それは確かに親切です;)。それについて働いていないのは何ですか?あなたは "金額"の値が文字列であることを認識していますか? –

+0

うーん、私はそれが文字列であることに気付かなかった。おそらく、それが問題の原因です。しかし、どうすればこのようなことが起きるでしょうか、私は最新の.NETドライバを使用し、PriceクラスのAmountプロパティは小数です...:Sとにかく、あなたが私に与えたクエリは結果を返しません。新しいオブジェクトを手で追加しようとし、その結果をあなたに知らせます。もう一度ありがとう:) – Davita

2

.NET MongoDBドライバは、Decimal型をStringにシリアル化します。このようにして、MongoDBからDecimalを読み込むときに精度/データを失うことなくDecimalを格納できます。

別の数値型を選択すると、問題が解決します。

関連する問題