2014-10-28 4 views
0

У меня есть коллекция MongoDB под названием Users. Я не знаю типов объектов заранее. Эта коллекция имеет не менее 3 различных типов объектов. Например:MongoDb выбрать различные типы объектов в коллекции

Тип 1:

{ 
"_id" : "9e1736d4-f3a1-47ed-bb51-3318129664f0", 
"userid" : 6711, 
"registerDate" : "2014-10-28T14:42:06", 
"lastLoginDate" : "2014-10-28T14:42:06", 

} 

Тип 2:

{ 
"_id" : "9e1736d4-f3a1-47ed-bb51-3318129664f1", 
"userid" : 6712, 
"email" : "[email protected]", 
"username" : "john doe", 

} 

Тип 3:

{ 
"_id" : "9e1736d4-f3a1-47ed-bb51-3318129664f2", 
"userid" : 63713, 
"city" : "orange", 
"state" : "new york", 
"country" : "US", 
} 

Как я могу получить различные типы (или верхний первый объект из каждой типа) из моей коллекции? Итак, если у меня 1 миллион пользователей и 3 различных структуры выше, я хотел бы получить 3 результата.

ответ

0

Добавить поле «тип», идентифицирующий тип документа. Затем используйте db.collection.group, чтобы сгруппировать результаты по вашему желанию.

+0

К сожалению, у меня нет прав на изменение в базе данных, только для чтения. Я просто не могу сделать это по запросу? –

+0

Нет эффективного способа сделать это в отношении миллионов пользователей. Если вы можете создать новую коллекцию, вы можете создать суррогатное поле типа в новой коллекции через MAP, выполнив сортировку названий полей документа, а затем группу по этому полю. Вам все еще нужно поле 'type', но вы можете сделать это, создав новую коллекцию. Но это очень неэффективно. –

0

запрос Issue для каждого типа, вы можете

db.c.findOne({registerDate: {$existed: true}}); 
db.c.findOne({email: {$existed: true}}); 
db.c.findOne({city: {$existed: true}}); 

Это должно быть очень быстрым и простым. :)

+0

спасибо, но проблема в том, что я не знаю типов объектов заранее :) –

+0

@Teoman shipahi, Oh my god. Тогда требуется четкое определение разницы. – Wizard

+0

Я добавлю его в описании. –

Смежные вопросы