我试图只获得会议[来自会议集合]的Notes [来自笔记集合],其中不包含“test”一词:
function getNotes(done) {
noteSchema.find({}).exec((err, notes) => {
var numNotes = 0;
async.each(notes, (n, next) => {
userSchema.findById(n.userId, (err, user) => {
if (err || !user) { next(); return; }
var emailsStr = utils.getEmailsString(user.emails);
if (!utils.toSkipEmail(emailsStr)) {
meetingSchema.findById(n.meetingId, (err, meeting) => {
if (err || !meeting) { next(); return; }
if (meeting.name.displayValue.indexOf('test', 'Test') == -1) {
numNotes++;
}
next();
});
}
})
}, (err, result) => {
console.log(util.format('Total Number of Notes: %d', numNotes));
done(null);
});
});
}
代码工作正常,无需添加行以按ID查找会议。它挂起就在那一点。
作为参考,这是一个函数的开头,后来过滤掉包含会议的任何“测试”或“测试”。
function getMeetings(done) {
meetingSchema.find({
'name.displayValue': { '$regex' : '(?!.*test)^.*$' , '$options' : 'i' }
}).exec((err, meetings) => {
Notes Schema的相关行:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var noteSchema = mongoose.Schema({
meetingId: {type: String, default: ''},
});
exports.Note = mongoose.model('Note', noteSchema);
会议架构没有备注字段。
答案 0 :(得分:0)
所以,如果我要去寻找这样的解决方案,我希望得到所有不属于会议的笔记,并在名称中加上'test'这个词,我可能会去另一个除此之外,除非有大量的笔记,你可以获得所有笔记并用他们的会议填充它们,然后进行过滤。假设您的NoteSchema定义了类似的内容:
meeting : { type: ObjectId, ref: 'Meeting'}
然后在你的查询中你可以做(给定notATest函数适当地返回true或false:
Note.find({}).populate('meeting').exec((e, n) => {
_.omit(n, (note) => { return notATest(note.meeting.name); });
});
或者,您可以首先搜索所有非测试会议,并在其上调用.populate('notes')
,如果'ref'采用其他方式。