13

サブドキュメント プロパティに基づいて、データベースからドキュメントのリストを取得しようとしています。私が使用しているモデルとスキーマは次のとおりです。

var elementSchema = new mongoose.Schema({
    name: String,
    description: String,

    _story: { type: mongoose.Schema.Types.ObjectId, ref: 'Story' },

    date_created: Date,
    date_modified: Date,
};
var storySchema = new mongoose.Schema({
    title: {type: String, default: '', trim: true},
    isPrivate: {type: Boolean, default: false},
});

mongoose.model("Story", storySchema);
mongoose.model("Element", elementSchema);

プライベートではないストーリーに属するすべての要素を取得しようとしています。ここで見たいくつかの投稿 ( 123 ) によると、解決策は _story.isPrivate を使用することです。私は現在これをやっています:

Element.find({'_story.isPrivate': false})
         .populate('_story')
         .exec(function(err, elements){
             if(err){
                 return next(err);
             }
             else if(elements.length > 0){
                 return res.send(elements);
             }
             else{
                 return res.send(404, {message: "No elements found"});
             }
});

しかし、結果は常に空のセットです (404 を返します)。条件がない場合、find はすべての要素を返し、_story を正しく設定します。また、デバッグ出力をアクティブにして、クエリが実行されていることを確認したところ、次のようになりました。

Mongoose: elements.find({ '_story.isPrivate': false }) { fields: undefined, safe: undefined }

これを MongoDB で実行しようとしても、結果が得られません。ここで何が問題なのですか?

ありがとう

4

2 に答える 2

4

モデルを再注文して、

var storySchema = new mongoose.Schema({
    title: {type: String, default: '', trim: true},
    isPrivate: {type: Boolean, default: false},
    elements: [{type: mongoose.Schema.Types.ObjectId, ref: 'Element'}]
});

Story.distinct('elements', {'isPrivate':false}, function(error, results) { 
  /* handle callback */ 
}

このようにして、単一の呼び出しを発行して要素の集合体を取得できます。

于 2015-09-22T15:03:42.940 に答える