我有一个NodeJS脚本在服务器上工作了6个月,本周我已经设置了一个新的服务器并安装了所有更新版本的软件,包括mongojs,nodejs和mongodb,不知怎的,我的代码没有再努力了。
代码部分:
collect.findOne({$or: [{from_id: enviou, to_id: viu}, {from_id: viu, to_id: enviou}]}, {sort: {$natural: -1}}, function (err, echoData) {
if (err || !echoData) {
console.log("No messages found -rv",err);
} else {
console.log(echoData);
}
});
给我错误:
{ [MongoError: Can't canonicalize query: BadValue Projection cannot have a mix of inclusion and exclusion.]
name: 'MongoError',
message: 'Can\'t canonicalize query: BadValue Projection cannot have a mix of inclusion and exclusion.',
'$err': 'Can\'t canonicalize query: BadValue Projection cannot have a mix of inclusion and exclusion.',
code: 17287 }
这部分:
collect.find({$or: [{from_id: de, to_id: para}, {from_id: para, to_id: de}]}, {skip: skipCount, limit: useDbLimit, sort: {time: 1}}, function (err, echoData) {
if (err || !echoData) {
console.log("No messages found -sm",err);
} else {
echoData.forEach(function (returnData) {
console.log(returnData);
});
}
});
给我错误:
{ [MongoError: Can't canonicalize query: BadValue Unsupported projection option: sort: { $natural: -1 }]
name: 'MongoError',
message: 'Can\'t canonicalize query: BadValue Unsupported projection option: sort: { $natural: -1 }',
'$err': 'Can\'t canonicalize query: BadValue Unsupported projection option: sort: { $natural: -1 }',
code: 17287 }
我对如何解决这个问题没有任何想法。它适用于我的旧服务器,但不适用于最新的mongodb和mongojs。有人可以帮帮我吗?
答案 0 :(得分:3)
我认为它与MongoJS中的一个变化有关,它曾经将投影选项传递给基础游标并且不再起作用,但我无法确定版本的确切变化。
现在,你的两个块在MongoDB API方面无效,因此,它们在MongoJS API上也无效,至少在每个块的当前版本上都是无效的。
在第一个块中,您应该将查询更改为以下内容:
collect.findOne({$query: {$or: [{from_id: enviou, to_id: viu}, {from_id: viu, to_id: enviou}]}, $orderby: {$natural: -1}}, function (err, echoData) {
...
});
第二个块比较棘手,因为你只能通过链接直接将这些指令传递给游标:
collect.find({$or: [{from_id: de, to_id: para}, {from_id: para, to_id: de}]}).skip(skipCount).limit(useDbLimit).sort({time: 1}, function (err, echoData) {
...
});
这些是与MongoJS / MongoDB 3.0 API兼容的调用。