Я хотел бы получить имена всех ключей в коллекции MongoDB.
Например, отсюда:
db.things.insert( { type: ['dog', 'cat'] } );
db.things.insert( { egg: ['cat'] } );
db.things.insert( { type: [] } );
db.things.insert( { hello: [] } );
Я хотел бы получить уникальные ключи:
type, egg, hello
Решение проблемы
Вы можете использовать агрегирование с новым $objectToArrayоператором агрегирования в версии 3.4.4, чтобы преобразовать все верхние пары ключ-значение в массивы документов, а затем с помощью и $unwindдля получения отдельных ключей во всей коллекции. (Используйте для ссылки на документ верхнего уровня.)$group$addToSet$$ROOT
db.things.aggregate([
{"$project":{"arrayofkeyvalue":{"$objectToArray":"$$ROOT"}}},
{"$unwind":"$arrayofkeyvalue"},
{"$group":{"_id":null,"allkeys":{"$addToSet":"$arrayofkeyvalue.k"}}}
])
Вы можете использовать следующий запрос для получения ключей в одном документе.
db.things.aggregate([
{"$match":{_id: "<<ID>>"}}, /* Replace with the document's ID */
{"$project":{"arrayofkeyvalue":{"$objectToArray":"$$ROOT"}}},
{"$project":{"keys":"$arrayofkeyvalue.k"}}
])
Комментариев нет:
Отправить комментарий