MongoDB: Найти объекты с именами полей, начинающимися с - PullRequest
0 голосов
/ 07 декабря 2018

Запрос к MongoDB: из заданной коллекции (см. Пример ниже) мне нужны только перечисленные объекты, которые содержат поля, где имя поля начинается с «need _».

Пример коллекции с тремя объектами

/* 1 */
{
    "_id" : 1,
    "need_some" : "A",
    "need_more" : 1,
    "website_id" : "123456789"
}

/* 2 */
{
    "_id" : 2,
    "need_more" : 2,
    "website_id" : "123456789"
}

/* 3 */
{
    "_id" : 3,
    "website_id" : "123456789"
}

Желаемый вывод:

/* 1 */
{
    "_id" : 1,
    "need_some" : "A",
    "need_more" : 1,
    "website_id" : "123456789"
}

/* 2 */
{
    "_id" : 2,
    "need_more" : 2,
    "website_id" : "123456789"
}

Запрос может выглядеть примерно так:

db.getCollection('nameCollection').find({ "need_.*"  : { "$exists" : true }})

1 Ответ

0 голосов
/ 07 декабря 2018

Вы можете использовать агрегацию ниже, используя $objectToArray в mongodb 3.4 и выше

db.collection.aggregate([
  { "$addFields": {
    "field": { "$objectToArray": "$$ROOT" }
  }},
  { "$match": { "field.k": { "$regex": "need_" }}},
  { "$project": { "field": 0 }}
])

Даст вам вывод

[
  {
    "_id": 1,
    "need_more": 1,
    "need_some": "A",
    "website_id": "123456789"
  },
  {
    "_id": 2,
    "need_more": 2,
    "website_id": "123456789"
  }
]
...