2017-05-30 74 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) 

它幫助我解決問題。

相關問題