2016-02-13 3 views
2

Я хочу запросить и получить все номера телефонов из одной из моей схемы в виде массива.MongoDb возвращает только определенные поля (номера телефонов) в виде массива

Моя схема является

var doctorSchema = new Schema({ 
     profile: { 
     fullname: String, 
     gender: String, 
     email: String, 
     dob: Date, 
     contact: 
     { mobile: String }, 
     } 
     }); 

Может кто-то помочь мне, как я могу запросить только contact.mobile и хранить все числа в массиве ??

Я пробовал $ map, но не работал.

+0

'Doctor.find ({} , 'contact.mobile' ...) 'должен возвращать то, что вы хотите. – Svenskunganka

ответ

1

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

var callback = function (err, result) { 
    if (err) { /* handle err */ }; 
    console.log('unique mobile numbers', result); 
}; 

Doctor.distinct("profile.contact.mobile", callback); 

или

var query = Doctor.distinct("profile.contact.mobile"); 
query.exec(callback); 

В MONGO оболочки, это будет эквивалентно:

var mobilenumbers = db.doctors.distinct("profile.contact.mobile"); 

Вы можете также использовать метод map() на promise возвращается из запроса как еще один способ, чтобы получить результаты в массиве:

var promise = Doctor.find({ }).select("profile.contact.mobile").exec(); 
promise.then(function (results) { 
    var numbers = results.map(function (m) { 
     return m.profile.contact.mobile; 
    }); 
    console.log(numbers); 
}).then(null, function (err) { 
    console.log(err); 
}); 

Монго оболочки эквивалентная операция использует метод map() курсора и следующим образом:

var mobilenumbers = db.doctors.find({}, {"profile.contact.mobile": 1}) 
           .map(function (m){ 
            return m.profile.contact.mobile; 
           }); 
+1

Большое спасибо() работает отлично .. –

1

Попробуйте с distinct

db.doc.distinct('profile.contact.mobile') 

Для тех образцов данных

{ "_id" : ObjectId("56bef5f4d43b2f3239759505"), "profile" : { "fullname" : "DJ", "email" : "hhh.com", "contact" : { "mobile" : "123456" } } } 
{ "_id" : ObjectId("56bef605d43b2f3239759506"), "profile" : { "fullname" : "ad", "email" : "gg.com", "contact" : { "mobile" : "127886" } } } 

результат

[ "123456", "127886" ] 
Смежные вопросы