MongooseArray #indexOf不使用对象id

时间:2012-10-17 07:42:21

标签: node.js mongoose

我正在尝试使用mongoose内置的indexOf()方法来查看doc数组中是否存在对象ID。但它似乎不适用于对象ID,即使文档说它应该。

var UserSchema = new Schema({
  , following : [{ type: Schema.ObjectId, ref: 'User'}]
  , followers : [{ type: Schema.ObjectId, ref: 'User'}]
});

这给了我-1

user1.followers.indexOf(user2._id);

以下数据:

console.log( user1.followers ) # => [ '505e2f1de888c7d701000001' ]
conosle.log( user2._id ) # => 505e2f1de888c7d701000001
console.log( user1.followers.indexOf( user2._id ) ) # => -1

我也试过传递user2对象,但同样的问题:

console.log( user1.followers.indexOf( user2 ) ) # => -1

我应该在最后一个日志中看到1,而不是-1。

我做错了什么?

以下是mongoose文档: http://mongoosejs.com/docs/api.html#types_array_MongooseArray-indexOf

2 个答案:

答案 0 :(得分:4)

老问题,但最近这点我,所以我会发布我的解决方案,为其他人燃烧午夜油:

user1.followers.indexOf(user2._id.toString());

答案 1 :(得分:0)

我发现了问题。我使用的是存储在会话中的用户,而不是来自db的用户对象。此外,它实际上必须是传递的对象ID:

User.findById(req.session.userid, function(err, user){
  user2.isFollowing = user.following.indexOf(user2._id);
});

在会话中存储对象很糟糕。应该总是从db中检索它们,这样它们就不会过时,你有一个真正的mongoose doc对象,而不是redis商店的json对象。