1

私のスキーマを以下に示します。

var productSchema = new Schema({
    name : String,
    likes : [{
        user_id : Schema.Types.ObjectId,
        date : Date
    }]
});

このコレクションがあるとします

{ name : A, likes : [ {user_id : id1, date : blahblah}, {user_id : id2, date : balh}] }

{ name : B, likes : [ {user_id : id1, date : blahblah}] }

{ name : C }

次に、クエリを実行して出力のようなものを表示したい

(user_id = id1){ name : A, like : 1}, { name : B, like : 1}, { name : C, like : 0}

(user_id = id2){ name : A, like : 1}, { name : B, like : 0}, { name : C, like : 0}

つまり、ここに「like」という新しいフィールドを追加したいと思います。

user_id が配列 (likes) に存在する場合、like は 1 であり、そうでない場合は 0 でなければなりません。

これを実現できますか?

4

2 に答える 2

0

スキーマについては、次のクエリを実行する必要があります。

db.collection.find({ likes: { $elemMatch: { user_id: idX }}});

このようにして、idXuserIdのエントリを持つ製品を取得します。likes他のすべてのものは、配列にuserIdを持っていません。この方法では、出力に1を追加し、他の出力に0を追加する必要があります。

問題が変わるため、userIdが同じ配列内に異なるエントリを持っている可能性があるかどうかについては言及していません。

于 2012-12-26T09:51:47.720 に答える