2012-10-17 71 views
2

我試圖使用mongoose的內置indexOf()方法來查看對象id是否存在於doc數組中。但它似乎沒有與對象id一起工作,即使文檔說它應該。MongooseArray#indexOf不與對象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

+0

參數必須是對象。 'user1.followers.indexOf(user2);' – Joonas

+0

仍然不起作用。 - isFollowing ['50680445639190c06a000002','505e2f1de888c7d701000001'] 505e2f1de888c7d701000001 -1 – chovy

回答

0

我發現這個問題。我正在使用存儲在會話中的用戶,而不是來自數據庫的用戶對象。此外,事實上確實必須是通過的對象ID:

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

在會話中存儲對象是不好的。應始終從db中檢索它們,以免它們過時,並且您擁有一個真正的貓鼬doc對象,而不是來自redis存儲區的json對象。

4

老問題,但是這個最近咬我,所以我會後我對別人挑燈解決方案:

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