3

オブジェクト ID が doc 配列に存在するかどうかを確認するために、mongoose の組み込み 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

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から取得する必要があり、redisストアのjsonオブジェクトではなく、真のmongoose docオブジェクトがあります。

于 2012-10-17T09:33:25.250 に答える