【发布时间】:2018-12-20 23:53:54
【问题描述】:
我想做搜索API。从请求正文位置搜索用户。为此,我需要来自两个集合的数据,即用户集合和 sessionSlot 集合。从用户集合想要全名、profilepic、位置、邮件等,从用户的 _id 想要来自 sessionSlot 集合的数据。
我尝试了以下代码:
var register = mongoose.model("user");
var sessionSlot = mongoose.model("sessionSlot");
register.find({
'location.address': {
$regex: '^' + req.body.address,
$options: 'i'
},
}]
}).exec(function (err, userDetail) {
for (var i = 0; i < userDetail.length; i++) {
sessionSlot.findOne({
'userID': userDetail[i]._id
}).exec(function (err1, slotData) {
if(slotData) {
if(slotData.sessions.length > 0) {
async.eachSeries(slotData.sessions, (slots, callback) => {
if (req.body.date) {
if (moment(slots.date).isSame(moment(req.body.date), 'day')) {
// console.log('slots--->', slots);
sessionData.push({
time: slots.time,
status: slots.status,
slotID: slotData.slotID,
});
}
}
else {
sessionData.push({
time: slots.time,
status: slots.status,
slotID: slotData.slotID,
});
}
slotCnt++;
callback();
});
}
}
else {
console.log('no slot created..',slotData);
sessionData = [];
}
})
}
res.json({'code':200, 'data':sessionData})
})
我没有从 sessionSlot 集合中得到正确的响应,有时它被覆盖数据或有时为空(例如从数组中获取最后一个值)。
请给我建议!!
我使用的是 mongoose 4.5 版(不使用聚合)
user schema:
var UserSchema = mongoose.Schema({
fullname: { type: String, default: null },
mail : { type: String, default: null },
profilepic : { type: String, default: null },
})
sessionSlot schema:
var sessionSlotSchema = mongoose.Schema({
userID : { type: String },
mail : { type: String },
slotID : { type: String },
slotFlag : { type: Boolean },
sessions : [{
status : { type: String, default:'empty' },
profilepic : { type: String, default:null },
fullname : { type: String, default:null },
autoBook : { type: Boolean, default:false },
time : { type: String, default: null }
}]
})
【问题讨论】:
标签: node.js mongodb express mongoose