Node.js & MongoDB 无法规范化查询
Node.js & MongoDB Can't canonicalize query
我有一个在服务器上运行了 6 个月的 NodeJS 脚本,这周我设置了一个新服务器并安装了所有更新版本的软件,包括 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 的新服务器。谁能帮帮我?
我认为这与 MongoJS 中的一项更改有关,该更改用于将投影选项传递给底层 cursos,但现在不再有效,但我无法确定确切的版本更改。
现在,您的两个块在 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 兼容的调用。
我有一个在服务器上运行了 6 个月的 NodeJS 脚本,这周我设置了一个新服务器并安装了所有更新版本的软件,包括 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 的新服务器。谁能帮帮我?
我认为这与 MongoJS 中的一项更改有关,该更改用于将投影选项传递给底层 cursos,但现在不再有效,但我无法确定确切的版本更改。
现在,您的两个块在 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 兼容的调用。