MongoDB查询子集合的嵌入对象

时间:2012-01-16 10:52:22

标签: .net mongodb

我正在挠头几个小时,无法弄清楚如何通过price.amount查询以下文件

{
  "_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个Price项目的对象,其数量为>例如10。

由于

2 个答案:

答案 0 :(得分: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值转换为数字。

答案 1 :(得分:2)

.NET MongoDB驱动程序将Decimal类型序列化为String。这样,当从MongoDB读取Decimal时,它可以存储Decimal而不会丢失任何精度/数据。

选择其他数字类型可以解决您的问题。