2016-03-21 11 views
0

自分の_idでユーザを検索し、 "好きな"値(配列)に特定の投稿IDが含まれているかどうかを確認したいとします。このアクションのためにdbにどのように問い合わせますか?これらの_idを配列に格納するのは大丈夫ですか?またはmongodbのコンベンションは他のドキュメントへの参照として保存することを好みますか?配列にmongodbドキュメントの投稿IDが含まれているかどうかを調べる

だから、私はちょうど "好き"の配列に投稿_idを持っているかどうかチェックしたいと思います。ここで

var users = new mongoose.Schema({ 
    name  : {type: String, unique : true, required : true, dropDups: true}, 
    password : {type: String, required : true}, //hash 
    liked  : [String], 
    created : {type: Date, default: Date.now} 
});     

私はこれが見えるかもしれませんどのように考えるかです:ユーザデータ用

function checkIfLiked() { 
    let uname = "Jim"; 
    let postId = "abc"; 
    //check if $USER has `postId` in $LIKED 
    user.findOne({$USER: uname},{$LIKED: {$in: postId} }, function(err, results) { 
    //do something after check 
    }); 
} 

答えて

2

{ "_id" : ObjectId("56effca6e668e15e2eaa6dfe"), "liked" : [ "11", "23", "4" ], "name" : "aa" } 
{ "_id" : ObjectId("56effcb1e668e15e2eaa6dff"), "liked" : [ "1", "2", "3" ], "name" : "bb" } 

liked配列

> db.user.find({liked: '4', name: 'aa'}) 
{ "_id" : ObjectId("56effca6e668e15e2eaa6dfe"), "liked" : [ "11", "23", "4" ], "name" : "aa" } 
4を持つユーザ名 aaを確認するには

しかし、

> db.user.find({liked: '2', name: 'aa'}) 

一致する結果はありません。


それはちょうど配列でこれらの_id年代を保存しても大丈夫ですかMongoDBの規則は、他の文書への参照として保存するために何か他のものを好むのでしょうか?

マングースpopulationそれを行うことができ、あなたは以下のように、ユーザーのスキーマを定義することができ

var users = new mongoose.Schema({ 
    name  : {type: String, unique : true, required : true, dropDups: true}, 
    password : {type: String, required : true}, //hash 
    liked  : [{ type: Schema.Types.ObjectId, ref: 'User' }], 
    created : {type: Date, default: Date.now} 
});  

var User = mongoose.model('User', users); 
関連する問題