2012-01-16 35 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,而不会丢失任何精度/数据。

选择另一种数字类型将解决您的问题。