2015-04-18 86 views
0

我有我的模式爲ActorCollections和電影:如何使用貓鼬查詢MongoDB子文檔?

var mongoose = require("mongoose"); 

var movieSchema = new mongoose.Schema({ 
    title : String, 
    score : Number, 
    year : String, 
    imdbId : String, 
    timestamp: { type : Date, default: Date.now }, 
}); 
var actorCollectionSchema = new mongoose.Schema({ 
    imdbId : String, 
    movies: [movieSchema], 
    actor: String, 
    timestamp: { type : Date, default: Date.now }, 
}); 

module.exports = mongoose.model('ActorCollection', actorCollectionSchema); 

我想形成一個查詢,首先找到正確的actorCollection,然後從actorCollection.movi​​es陣列找到電影的某些屬性。

我一直在使用$ elemMatch找到嵌套在子文件項目試圖

ActorCollection.findOne({imdbId: imdbId}, function(err, collection){ 
    //collection.movies is my array 
    // any mongoose methods to query this array??? 
} 

我也看到過的方法,但我不能確定如何首先ActorCollection過濾。如果多個演員出現在同一部電影中,我無法知道我將修改哪個ActorCollection。

任何想法?我能否以某種方式結合查詢來實現此目的?

+0

您可以接受解決問題的任何答案。 – chridam

回答

1

使用elemMatch

ActorCollection 
    .findOne({"imdbId": imdbId) 
    .elemMatch("movies", {"title":"foo"}) 
    .exec(cb); 
1

這結束了對我的工作。我不得不將這些查詢分解成單獨的參數。

ActorCollection.findOne({ 
     imdbId: imdbId, 
    }, 
    { 
     movies: { $elemMatch: { 
      title: "Movie title" 
     }}, 
    }, function(err, movie){ 
     movie 
    })