如何在db调用之外的mongoId数组中找到mongoId

时间:2015-01-21 07:20:03

标签: node.js mongoose objectid

我意识到可以通过db调用找到它,但出于好奇心,例如在节点中如果我有一组mongoose文档id。我如何模拟针对该数组的indexOf函数以确定是否还有另一个mongoId?

我只想问,因为直接比较id并不起作用,需要使用`objectId.equals()'功能。是否有一个mongoose / mongoId函数可以为ids的indexOf做类似的事情?

1 个答案:

答案 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。