我正在尝试使用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
答案 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对象。