Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js&;MongoDB可以';t规范化查询_Javascript_Node.js_Mongodb_Mongodb Query_Mongojs - Fatal编程技术网

Javascript Node.js&;MongoDB可以';t规范化查询

Javascript Node.js&;MongoDB可以';t规范化查询,javascript,node.js,mongodb,mongodb-query,mongojs,Javascript,Node.js,Mongodb,Mongodb Query,Mongojs,我有一个在服务器上运行了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 ||

我有一个在服务器上运行了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的一个变化有关,MongoJS过去将投影选项传递给底层的Curso,但现在已经不起作用了,但我无法确定确切的版本变化

现在,就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兼容调用。

只是观察:我认为错误与代码块不匹配。我收到错误“无法读取未定义的属性排序”,那么应该使用第一个解决方案(带有
$orderby
的解决方案)因为对只返回一个文档的查询结果进行排序是没有意义的。