Запрос MongoDB для ограничения значений на основе условия - PullRequest
1 голос
/ 30 января 2011

У меня есть такая коллекция:

{ "_id" : ObjectId("4d45bd25957a15b80702d4e4"), "codenum" : 10, "payment" : [
 {
  "pcode" : 100,
  "amount" : 10000
 },
 {
  "pcode" : 101,
  "amount" : 6000
 }
], "age" : 70 }

Обратите внимание, что массив платежей встроен в эту коллекцию. Теперь я хотел бы получить только код платежа, соответствующий 101 в ответе на поиск.

Предоставление запроса, подобного следующему:

db.test.find({"codenum":10, "payment.pcode": 101}, 
             {"codenum":1, "payment.pcode":1, "payment.amount":1})

получит весь мой документ, включая другие коды оплаты, как на приведенном выше экране.

Однако, Мне требуется ответ примерно такой:

{ "_id" : ObjectId("4d45bd25957a15b80702d4e4"), "codenum" : 10, "payment" : [
 {
  "pcode" : 101,
  "amount" : 6000
 }
] }

Возможно ли это в mongodb?

В update () есть позиционное совпадение, которое можно использовать, например, «payment. $. Amount», чтобы установить соответствующее поле на основе условия.

Может быть, MongoDB может поддерживать такой запрос:

db.test.find({"codenum":10, "payment.pcode": 101}, 
             {"payment.$.pcode": 1, "payment.$.amount":1})

, которая затем выдаст только те записи, которые соответствуют заданному условию.

Есть мысли?

Ответы [ 2 ]

1 голос
/ 09 января 2012

Это даст вам то, что вам нужно, даже если оно все еще находится в разработке.http://www.mongodb.org/display/DOCS/Aggregation+Framework

1 голос
/ 30 января 2011

Насколько мне известно, невозможно выбрать только одну запись из массива в MongoDB.Вы можете вернуть только определенные поля из документа (т. Е. Ваш массив платежей), но вы не можете вернуть только часть массива на основе запроса.(Вы можете использовать $slice для возврата определенного элемента, разделенного индексом, но это не даст вам того, что вам нужно).

Вы должны запросить либо все поля, либо ни одного из них. Этот билет JIRA описывает проблему, и в настоящее время он «запланирован, но не запланирован».

В настоящее время вам нужно просто извлечь соответствующую часть документа в вашемкод приложения.

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