Ter*_*hih 12 mongoose mongodb node.js
我使用mongodb 3.5.5与mongoose 4.9.8和Node.js版本是7.10,当我将我的应用程序发布到生产服务器时,错误发生了,但在我的开发环境中工作.
我该如何解决这些问题?
错误消息:
{ MongoError: The 'cursor' option is required, except for aggregation explain
at Function.MongoError.create (/data/deploy/aaa/webapp/node_modules/mongodb-core/lib/error.js:31:11)
at /data/deploy/aaa/webapp/node_modules/mongodb-core/lib/connection/pool.js:489:72
at authenticateStragglers (/data/deploy/aaa/webapp/node_modules/mongodb-core/lib/connection/pool.js:435:16)
at Connection.messageHandler (/data/deploy/aaa/webapp/node_modules/mongodb-core/lib/connection/pool.js:469:5)
at Socket.<anonymous> (/data/deploy/aaa/webapp/node_modules/mongodb-core/lib/connection/connection.js:321:22)
at emitOne (events.js:96:13)
at Socket.emit (events.js:191:7)
at readableAddChunk (_stream_readable.js:178:18)
at Socket.Readable.push (_stream_readable.js:136:10)
at TCP.onread (net.js:561:20)
name: 'MongoError',
message: 'The \'cursor\' option is required, except for aggregation explain',
ok: 0,
errmsg: 'The \'cursor\' option is required, except for aggregation explain',
code: 9,
codeName: 'FailedToParse' }
Run Code Online (Sandbox Code Playgroud)
js代码:
articleLikeSchema.statics.sumById = function ({id = ''} = {}) {
return this.model('ArticleLike').aggregate([
{ $match: { id: id } },
{ $group: { _id: '$id', count: { $sum: 1 } } }
]).then(sum => {
if (!sum || sum.length === 0) return Promise.resolve({count: 0})
else return Promise.resolve(sum[0])
})
}
Run Code Online (Sandbox Code Playgroud)
Mongoose执行命令:
Mongoose: articlelikes.aggregate([ { '$match': { id: '1494606935' } }, { '$group': { _id: '$id', count: { '$sum': 1 } } } ], {})
Run Code Online (Sandbox Code Playgroud)
您需要为在Mongo 3.6中更改的聚合调用提供游标选项
https://docs.mongodb.com/manual/reference/command/aggregate/#dbcmd.aggregate
因此,将{cursor:{}}添加到您的汇总调用中可以解决此问题:
articleLikeSchema.statics.sumById = function ({id = ''} = {}) {
return this.model('ArticleLike').aggregate([
{ $match: {
id: id
}
},
{ $group: {
_id: '$id',
count: { $sum: 1 }
}
}
],
{ cursor:{} }
).then(sum => {
if (!sum || sum.length === 0) return Promise.resolve({count: 0})
else return Promise.resolve(sum[0])
})
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11342 次 |
最近记录: |