我想以数组的形式查询并获取我的一个架构中的所有电话号码。
我的架构是
var doctorSchema = new Schema({
profile: {
fullname: String,
gender: String,
email: String,
dob: Date,
contact:
{ mobile: String },
}
});
有人可以帮助我如何仅查询contact.mobile并将所有数字存储在数组中?
我尝试了$ map但它不起作用。
答案 0 :(得分: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" ]
答案 1 :(得分: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 shell中,这相当于:
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);
});
mongo shell等效操作使用map()
游标方法,如下:
var mobilenumbers = db.doctors.find({}, {"profile.contact.mobile": 1})
.map(function (m){
return m.profile.contact.mobile;
});