2017-08-03 13 views
0

私はmongodbに慣れていて、aggregate$lookupという文章の次の文書で、私は本当に混乱した質問に出会った。

私は、ユーザーのスキーマ

const userSchema = new Schema({ 
    userName: {type: String, index:{unique: true}}, 
    password: String, 
    avatar: String 
}) 

コメントスキーマ

const commentSchema = new Schema({ 
    post: {type: Schema.Types.ObjectId, ref:'postModel'}, 
    author:{type: Schema.Types.ObjectId, ref:'userModel'}, 
    content: String, 
    createTime: Date 
}) 

やモデルcommentModel= mongoose.model('commentModel', commentSchema) userModel = mongoose.model('userModel', userSchema) を持って、私は

commentModel.aggregate.([{$lookup: { 
    from: 'userModel', 
    localField: 'author', 
    foreignField: '_id', 
    as: 'common' 
}]) 

を行うしかし、私は、クエリでは一般的に空得ます。 dbのデータによれば、私はこの結果を得るべきではありません。検索後、私はまだ間違いを見つけることができません。

最後に、aggregateメソッドを使用する必要があります。$lookupを参照文書に使用する必要があります。それは意味がありますか?

答えて

1

$ lookupのfromフィールドはモデル名ではなく、コレクション名です。あなたはこの

db.model('User', userSchema) 

のようなモデルを初期化しているのであれば、その後の検索クエリは、あなたの答えを

commentModel.aggregate([{$lookup: { 
    from: 'users', 
    localField: 'author', 
    foreignField: '_id', 
    as: 'common' 
}]) 
+0

おかげである必要があり、私は短いため、私はモデルの一部を言及しなかった、私の質問を編集しましたしかし、私はこれらのモデルを作成しました。 – rookiect

+1

更新された質問に従って、コレクション名は 'usermodels'でなければなりません。あなたはmongodbと 'show collections'に直接接続して確認できます – sidgate

+0

ありがとうsidgate。あなたは問題を指摘し、私はmongoシェルに接続し、 'userModel'の代わりに' usermodels'を使用します、それは動作します!しかし、私の初期の練習、例えば '参照をつける 'のようなときに' userModel'を取るとうまくいきます。とにかく、あなたの答えに感謝、それは私がクレイジーになるのを防ぐ:)良い一日を! – rookiect

関連する問題