2015-09-06 36 views
1

我有一个在服务器上工作了6个月的NodeJS脚本,本周我设置了一个新的服务器并安装了所有更新版本的软件,包括mongojs,nodejs和mongodb,不知何故我的代码不再工作。Node.js&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

只是一个观察:我认为你与代码块的错误不匹配 – fixmycode

回答

3

我认为它与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兼容的调用。

+0

我收到错误“无法读取属性'排序'未定义的” – user2241408

+0

在哪个块? – fixmycode

+0

on .findOne – user2241408