3

我正在尝试使用猫鼬内置的 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。

我究竟做错了什么?

这是猫鼬文档: http: //mongoosejs.com/docs/api.html#types_array_MongooseArray-indexOf

4

2 回答 2

4

老问题,但这让我最近有点困惑,所以我将发布我的解决方案,供其他人熬夜:

user1.followers.indexOf(user2._id.toString());
于 2014-05-30T14:53:22.497 回答
0

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

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

在会话中存储对象是不好的。应该始终从 db 中检索它们,这样它们就不会过时,并且您拥有一个真正的 mongoose doc 对象,而不是来自 redis 存储的 json 对象。

于 2012-10-17T09:33:25.250 回答