Извлекать монго документы на основе нескольких полей - PullRequest
0 голосов
/ 09 мая 2018

Данный монго-документ следующей формы в коллекции:

{
  "_id":"ObjectId",
  "value":{
    "id": 1,
     "payment": [
       {
        "status": {
           "id": "1.1",
           "value": "Paid"
         }
      },
      {
       "status": {
           "id": "1.2",
           "value": "Scheduled"
        }
      },
      {
      "status": {
          "id": "1.3",
          "value": "Recorded"
       }
      }
    ]
  }
}

ids = [1,2,3,4]

Как я могу получить все документы, имеющие id в ids и хотя бы один из payments.status.value, равный Scheduled состоянию?

Я использую следующий запрос, но он возвращает 0 записей,

db.collectionName.find({$and:[{"value.id":{$in:ids}},{"value.payment.status.value":"Scheduled"}]})`

Ответы [ 2 ]

0 голосов
/ 10 мая 2018
db.collection.find({
    'value.payment': {
        $elemMatch: {
            'status.value': 'Scheduled'
        }
    },
    'value.id': {
        $in: [1, 2, 3, 4]
    }
}, {
    'value.id': 1,
    'value.payment.$.status': 1
})
0 голосов
/ 09 мая 2018

можно указать название коллекции
так что вместо этого:

db.collection.find({
    $and:
    [
        {"value.id": {$in:ids}},
        {"value.payment.status.value":"Scheduled"}
    ]
})

Вы можете написать:

db.payments.find({
    $and:
    [
        {"value.id":{$in:ids}},
        {"value.payment.status.value":"Scheduled"}
    ]
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...