2017-05-30 40 views
0

我使用mongodb本机驱动器来获取查询结果的游标。 余米使用“注释”字段,它基本上是低于字符串使用无法解析:评论:1. 'comment '字段必须是BSON类型字符串

let leve1_n = 'labreports'; 
let matchLabReports = { level1_n: "labreports" }; 
let sortCondition = { _id: 1 }; 
let projection = {comment : 1 , color: 1, value: 1, value_n: 1, value_d: 1, rangeStart: 1, rangeEnd: 1, level2: 1 }; 
let collectionName = collectionNames.biomarkerAggregations; 
let cursor = dbModule.findCursorSort(dbModule.getDbHandle(dbName), collectionName, matchLabReports, projection,sortCondition); 

     cursor.forEach(doc => {  
     // Lambda Expression 
     // Do something with doc. 
     }) 

findcursorSort

function findCursorSort(db, collectionName, query, projection, sortCondition, options) { 
    if (!errorCheck(db)) { 
     let cursor = db.collection(collectionName).find(query, projection).sort(sortCondition); 
     if (!options) { 
      return cursor; 
     } 
     for (let i = 0; i < options.length; i++) { 
      cursor = cursor.addOption(options[i]); 
     } 
     return cursor; 
    } 
} 

的代码片段IM但这是给我错误,如..

name:'MongoError', message:'无法解析:评论:1. \'comment \'字段必须是BSON类型的字符串。', OK:0, ERRMSG: '解析失败:注释:1. \' 注释\ '字段必须是BSON字符串类型', 码:9, 代号: 'FailedToParse'}

从项目中删除评论字段后,一切工作正常。 任何帮助,将不胜感激。

+0

'.findCursorSort()'是您的代码中的自定义函数。它有什么作用?我们需要知道,因为错误来自该函数内部的代码。 –

+0

无关(我认为),但我也猜测这个'let leve1_n ='labreports'; let matchLabReports = {level1_n:“labreports”};'你实际上是指'let leve1_n ='labreports';让matchLabReports = {}; matchLabReports [level1_n] =“labreports”;'这实际上是如何为查询分配动态密钥的。尽管您可能认为自己使用了可变值,但您的代码将被串接为“{”level1_n“:”labreports“}”。你不是,因为这不是JavaScript对象中的关键名称的工作方式。 –

+0

@NeilLunn感谢您的回复。是.findCursorSort()是一个自定义函数,这里是这个函数的代码。 https://jsfiddle.net/jjv0g6k0/ –

回答

0

mongodb本地驱动程序中的collection.js中有一项功能,用于检查哪些字段是查询的选项,哪些是投影。如果投影的所有字段由注释,限制,排序等字段组成(用testForFields变量编写),则它们将作为选项。

尝试解决这个问题,像这样:

原代码:

db.collection(collectionName).find(query, projection) 

固定码:

db.collection(collectionName).find(query).project(projection) 

它帮助我解决问题。

相关问题