2015-01-21 26 views
3

我知道它可能通過數據庫調用找到此信息,但出於好奇,例如在節點中如果我有一個貓鼬文檔ID數組。我怎樣才能模仿一個indexOf函數來判斷是否有另一個mongoId呢?如何在數據庫調用外的mongoIds數組中找到mongoId

我只問,因爲直接比較ID不起作用,需要使用`objectId.equals()'函數。是否有一個mongoose/mongoId函數爲id執行類似於indexOf的操作?

回答

0

如果你的問題是你不確定哪個是字符串,或者在比較中是ObjectId,那麼只需將所有內容轉換爲「字符串」即可。所有對象都有.toString(),甚至是字符串。而數組轉換隻需使用.map()

例子:

var mongoose = require('mongoose'), 
    Schema = mongoose.Schema; 

var objSchema = new Schema({ 

}); 

var Obj = mongoose.model('Obj',objSchema); 


var arrayTest1 = [], 
    arrayTest2 = []; 

for (x = 0; x < 10; x++) { 
    var obj = new Obj(); 
    arrayTest1.push(obj.id); 
    arrayTest2.push(obj.id.toString()); 
} 

var el1 = arrayTest1[4], 
    el2 = arrayTest2[3]; 

[el1,el2].forEach(function(el) { 
    console.log(el); 
}); 

console.log(arrayTest1.indexOf(el1)); 
console.log(arrayTest2.indexOf(el2)); 


console.log(arrayTest1.map(function(el) { 
    return el.toString() 
}).indexOf(el1.toString())); 
console.log(arrayTest2.map(function(el) { 
    return el.toString() 
}).indexOf(el2.toString())); 

兩對陳述的評估自己的正確的索引匹配。所以第二種形式對於對象類型是通用的。 ObjectId或盯着任何一方。

相關問題