【发布时间】:2015-09-11 21:54:08
【问题描述】:
我尝试使用 bluebird + mongoose 分别查询每个 Club 的 DevHiin 实例,如下代码:
DevHiin.clubs的数据结构是:
, clubs : [{ type: Schema.Types.ObjectId, ref: 'Club' }]
club_M 是 Club 模式的一个实例:
User.findOne({"_id": req.user._id})
.populate('clubs', '-textIndex')
.exec(function (err, user) {
if (err) res.status(500).json(err);
if (user.clubs) {
var clubs_M = user.clubs;
for (c = 0; c < clubs_M.length; c++) {
var club_M = clubs_M[c];
if (club_M.lst > lstDate) {
serverData.clubs.push(club_M);
var ciinPromise = DevHiin.find({"clubs": {$elemMatch: club_M}, "ts": {"$gt": lastSyncTime}})
.populate('uId', '_id username', null, null) // get necessary user info for a hiin
.lean()
.sort("ts")
.limit(10)
.execAsync();
promises.push(ciinPromise);
}
}
Promise.all(promises).then(function (ciinArrays) {
serverData.ciinArrays = ciinArrays;
callback(ciinArrays);
}).catch(function (err) {
callback(err);
});
很遗憾,我收到以下错误信息:
"Error: Can't use $__ with Array.
at SchemaArray.castForQuery (/Users/vince-fan/WorkSpaces/MEAN/V_Starter/node_modules/mongoose/lib/schema/array.js:188:13)
at SchemaArray.cast$elemMatch (/Users/vince-fan/WorkSpaces/MEAN/V_Starter/node_modules/mongoose/lib/schema/array.js:336:23)
at SchemaArray.castForQuery (/Users/vince-fan/WorkSpaces/MEAN/V_Starter/node_modules/mongoose/lib/schema/array.js:191:19)
at module.exports (/Users/vince-fan/WorkSpaces/MEAN/V_Starter/node_modules/mongoose/lib/cast.js:196:39)
at Query.cast (/Users/vince-fan/WorkSpaces/MEAN/V_Starter/node_modules/mongoose/lib/query.js:2350:10)
at Query.find (/Users/vince-fan/WorkSpaces/MEAN/V_Starter/node_modules/mongoose/lib/query.js:999:10)
at Query.exec (/Users/vince-fan/WorkSpaces/MEAN/V_Starter/node_modules/mongoose/lib/query.js:1984:17)
at Query.tryCatcher (/Users/vince-fan/WorkSpaces/MEAN/V_Starter/node_modules/bluebird/js/main/util.js:24:31)
at Query.ret [as execAsync] (eval at <anonymous> (/Users/vince-fan/WorkSpaces/MEAN/V_Starter/node_modules/bluebird/js/main/promisify.js:1:0), <anonymous>:12:23)
at EventEmitter.<anonymous> (/Users/vince-fan/WorkSpaces/MEAN/V_Starter/controllers/sync.js:189:18)
at EventEmitter.<anonymous> (/Users/vince-fan/WorkSpaces/MEAN/V_Starter/node_modules/mongoose/node_modules/mpromise/lib/promise.js:175:45)
at emitOne (events.js:77:13)
at EventEmitter.emit (events.js:169:7)
at Promise.safeEmit (/Users/vince-fan/WorkSpaces/MEAN/V_Starter/node_modules/mongoose/node_modules/mpromise/lib/promise.js:81:21)
at Promise.fulfill (/Users/vince-fan/WorkSpaces/MEAN/V_Starter/node_modules/mongoose/node_modules/mpromise/lib/promise.js:94:24)
at Promise.resolve (/Users/vince-fan/WorkSpaces/MEAN/V_Starter/node_modules/mongoose/lib/promise.js:113:23)
at /Users/vince-fan/WorkSpaces/MEAN/V_Starter/node_modules/mongoose/lib/query.js:1174:16
at /Users/vince-fan/WorkSpaces/MEAN/V_Starter/node_modules/mongoose/node_modules/kareem/index.js:109:16
at doNTCallback0 (node.js:408:9)
at process._tickCallback (node.js:337:13)"
这是 bluebird promise 错误,还是 mongoose 错误?我该如何解决?
【问题讨论】:
-
在我看来,您的
club_M实例之一(您传递给$elemMatch)可能无效。
标签: node.js mongodb mongoose bluebird