Получить конкретную часть документа - PullRequest
33 голосов
/ 14 марта 2011

Я пробую Mongo db, и мне интересно, возможно ли получить только определенную часть документа?

Например, у меня есть:

{
  "name" : "MongoDB",
  "info" : { x : 203, y : 102 }
}

, и я хочу толькосодержание info.

Самое близкое, что я нашел, это db.collection.find({}, { info: 1 }), но это возвращает меня { "info" : { x : 203, y : 102 } }, когда мне нужен только { x : 203, y : 102 }.

Ответы [ 6 ]

29 голосов
/ 14 марта 2011

Вы могли бы сделать

db.collection.find({},{'info.x':1, 'info.y':1})

но это означает перечисление каждого элемента информационного объекта в проекции - что может или не может быть тем, что вы ищете.

13 голосов
/ 27 марта 2014

Вы можете использовать функцию distinct(), которая выглядит следующим образом:

db.collection.distinct("info", {info : {$exists : true}})
11 голосов
/ 15 марта 2011

Нет, вы не можете вернуть только значения для х / у; даже если вы ограничите поля, внешняя структура все еще возвращается.

Подробнее см. Прогнозы результатов .

1 голос
/ 15 декабря 2015

MongoDb docs

прочитайте это

в этом. Если вы не укажете проекцию, метод find () возвращает все поля всех документов, соответствующих запросу.

0 голосов
/ 09 июня 2019
  • Начиная с Mongo 4.2, оператор агрегации $replaceWith может использоваться для замены документа другим (в нашем случае субдокументом):

    // { name: "MongoDB", info: { x: 203, y: 102 } }
    db.collection.aggregate({ $replaceWith: "$info" })
    // { "x" : 203, "y" : 102 }
    
  • До Mongo 4.2 и запуска Mongo 3.4, $replaceRoot может использоваться вместо $replaceWith:

    db.collection.aggregate({ $replaceRoot: { newRoot: "$info" } })
    
0 голосов
/ 15 декабря 2015

Вы можете использовать структуру агрегирования :

  1. $ фаза совпадения (необязательно) для фильтрации результатов.
  2. $ фаза проекта для выбора полей

    db.getCollection('yourCollection').aggregate([ {$match:{_id:ObjectId("566fc97f5b79dff1a73ca2ae")}}, {$project:{_id:0, "x":"$info.x", "y":"$info.y"}} ])

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