我意识到可以通过db调用找到它,但出于好奇心,例如在节点中如果我有一组mongoose文档id。我如何模拟针对该数组的indexOf函数以确定是否还有另一个mongoId?
我只想问,因为直接比较id并不起作用,需要使用`objectId.equals()'功能。是否有一个mongoose / mongoId函数可以为ids的indexOf做类似的事情?
答案 0 :(得分: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或sting。