2014-04-24 1 views
10

Как получить массив, содержащий все значения определенного поля для всех моих документов в коллекции?Список всех значений определенного поля в mongodb

db.collection:

{ "_id" : ObjectId("51a7dc7b2cacf40b79990be6"), "x" : 1 } 
{ "_id" : ObjectId("51a7dc7b2cacf40b79990be7"), "x" : 2 } 
{ "_id" : ObjectId("51a7dc7b2cacf40b79990be8"), "x" : 3 } 
{ "_id" : ObjectId("51a7dc7b2cacf40b79990be9"), "x" : 4 } 
{ "_id" : ObjectId("51a7dc7b2cacf40b79990bea"), "x" : 5 } 

"db.collection.ListAllValuesForfield (х)" Результат: [1,2,3,4,5]

Кроме того, что, если это поле было массив?

{ "_id" : ObjectId("51a7dc7b2cacf40b79990be6"), "y" : [1,2] } 
{ "_id" : ObjectId("51a7dc7b2cacf40b79990be7"), "y" : [3,4] } 
{ "_id" : ObjectId("51a7dc7b2cacf40b79990be8"), "y" : [5,6] } 
{ "_id" : ObjectId("51a7dc7b2cacf40b79990be9"), "y" : [1,2] } 
{ "_id" : ObjectId("51a7dc7b2cacf40b79990bea"), "y" : [3,4] } 

"db.collection.ListAllValuesInArrayField (у)" Результат: [1,2,3,4,5,6,1,2,3,4]

Кроме того, я могу сделать этот массив уникален? [1,2,3,4,5,6]

+1

возможно дубликат [Получение явного агрегирования поля массива через индексы] (http://stackoverflow.com/questions/12183444/getting-a-distinct-aggregation-of- a-array-field-through-indexes) –

+0

Прекрасное спасибо! Должен ли я снять это? – chimpsarehungry

ответ

21

db.collection.distinct('x')

должен дать вам массив уникальных значений для этого поля.

2

Это возвращает массив документации, содержащий только это значение х ...

db.collection.find(
    { }, 
    { x: 1, y: 0, _id:0 } 
) 
+0

Спасибо за этот ответ, именно то, что мне нужно. – metamaker

1

Примечание: Мой ответ - это вилка из первоначального ответа.

Перед любыми «большими пальцами» здесь «превью» принятого ответа :).


db.collection.distinct("NameOfTheField")

Находит различные значения для заданного поля через одну коллекцию или представления и возвращает результаты в массиве.

Ссылка: https://docs.mongodb.com/manual/reference/method/db.collection.distinct/