我有一些看起来像这样的代码
return courseModel.findQ({ autoReview: true}).then(function(autoCourses){
autoCourses = _.pluck(autoCourses, '_id');
console.log("autoCourses", autoCourses);
return userCoursesModel.findQ({
activityId: {
$in: autoCourses
}
}).then(function(ucs) {
var saves = [];
console.log("ucs", ucs);
当我记录" autoCourses"我看到打印了一些文件,并且lodash采摘应该拔出每个文件的_id。我确认这是正常的。
我正在使用mongoose-q:
https://github.com/iolo/mongoose-q
我尝试了正常的"发现"同样,但没有运气。
当我执行findQ({})并查找所有文档时,我可以看到与activityId匹配的文档。例如:
autoCourses [ 55d3b57e395d0105a4828f18,
55d4e0b8df5d4cdc23c916e2,
55d23654642c1d05124c1ace,
55d238b0642c1d05124c1ad2,
55d23bb1ecce9f4b14f79c7b,
55d257cf70721efc16db1c24,
55d2682532eace3118376a95,
55d2694a32eace3118376aad,
此外,当我使用findAll记录每个用户课程activityId时,我可以看到有匹配项:
ucs.activityId 55de1dedc7c10dfc3bf5d9ae
ucs.activityId 55d3a91d46206dde7a46ed94
ucs.activityId 55df9974d8dfddb877a372f9
ucs.activityId 55d3b57e395d0105a4828f18
这里发生了什么?为什么查询中的$不起作用?
更新:
根据要求,这是用户课程架构的样子:
var UserCourseSchema = new Schema({
activityId: {
type: Schema.Types.ObjectId,
ref: 'courses',
required: true
},
和课程
var CourseSchema = new Schema({
autoReview: {
type: Boolean,
default: false
},
创建userCourse文档:
var newUserCourse = {
userId : userId,
activityId : activity._id,
steps : []
}
// copy steps from activity
activity.steps.forEach(function(step){
newUserCourse.steps.push({partId: step._id});
})
return UserCourses.createQ(newUserCourse);
答案 0 :(得分:0)
我联系了MongoDB对此的支持,我发现mongoose-q使用的是旧版本的mongoose(<版本4),而我的顶级依赖关系是4.0.5,这导致了奇怪的行为。一旦我将mongoose-q更新为0.1.0并且mongoose更新为4.1.6并且该查找再次起作用。