mongodb (orm として mongoose を使用) で入力クエリを作成しようとしていますが、100% は機能しません。populate を適用するドキュメントからすべてのエントリを取得することを意味します... ALL、(交差したドキュメントで) 一致クエリと一致するエントリ (およびネストされたオブジェクトを取得する) ですが、他のエントリも取得します(そしてネストされたオブジェクトは null です)。
これは私がやったことです:
モデル
var userSchema = Schema({
name: String,
email: String,
idiom: String
});
var ticketsSchema = Shema({
user_id:{ type:Schema.Types.ObjectId, ref:'User', required: true},
date: Date,
points: Number,
kart: String
});
移入
tickets.find()
.populate(
{
path: 'user_id',
match:{name:"user1"}
}
).exec(function (err, result) {
if (err) return handleError(err);
res.send(result);
});
考えられる結果は次のとおりです。
Object[0]
__v: 0
_id: "5655b68ccbe953bc2a78da54"
date: "2015-11-25T13:24:28.561Z"
date: "2015-11-25T13:24:28.561Z"
points: 50
kart: "Senior"
user_id: Object
__v: 0
_company: 0
_id: "5655b656cbe953bc2a78da53"
name: "user1"
email: "user1@mail.com"
idiom: "es"
Object[1]
__v: 0
_id: "5655b732e0685c441fddb99b"
date: "2015-11-25T13:27:14.608Z"
points: 75
kart: "Pro Senior"
user_id: Object
__v: 0
_company: 0
_id: "5655b656cbe953bc2a78da53"
name: "user1"
email: "user1@mail.com"
idiom: "es"
Object[2]
__v: 0
_id: "56564613701da2981aa017d6"
date: "2015-11-25T23:36:51.774Z"
points: 75
kart: "Pro Senior"
user_id: null
Object[3]
__v: 0
_id: "565646ee701da2981aa017d8"
date: "2015-11-25T23:40:30.308Z"
points: 75
kart: "Pro Senior"
user_id: null
これはまさに私がやりたいことではありません...最後の2つは表示されないようにしたいと思います。
編集
私は自分自身を明確に説明していなかったと思います...私がやりたいのはJOINクエリです...
私はmapreduceを使用する必要があることを見てきました、私はやろうとしましたが、それがある場所が見つかりませんダミーについて説明します。今まで私ができることはこれだけです:
ticketsDB.find()
.populate(
{
path: 'user_id',
match:req.body
}
).exec(function (err, result) {
if (err) return res.send(err);
reslt=[];
for(var i in result)
if(result[i].user_id)reslt.push(result[i]);
console.log(reslt);
res.send(reslt);
});
ありがとうございました。