MongoDB запрос встроенного объекта дочерней коллекции - PullRequest
0 голосов
/ 16 января 2012

Я несколько часов чищу голову и не могу понять, как я могу запросить следующий документ по цене. Сумма

{
  "_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 ]

2 голосов
/ 16 января 2012

Драйвер .NET MongoDB сериализует тип Decimal в строку. Таким образом, он может сохранять десятичное число без потери точности / данных при чтении десятичного числа из MongoDB.

Выбор другого числового типа решит вашу проблему.

2 голосов
/ 16 января 2012
> 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")
}

Ваше поле "Количество" имеет тип string (что я предполагаю, что это неправильно). Таким образом, вам нужно сравнить со строковым значением, как показано в моем примере запроса. Очевидно, это даст довольно непредсказуемые результаты, если вы действительно хотите сравнить целые числа. Если это так, преобразуйте поле «Сумма» и значение $ gt в запросе в числа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...