0

私のスキーマは以下の通りです

セクションスキーマ

var SectionSchema = new Schema({
    name: String,
 documents : {
        type : [{
            type: Schema.ObjectId,
            ref: 'Document'
        }]
    }
}

}

ドキュメントスキーマ

var DocumentSchema = new Schema({
    name: String,
    extension: String,
    access: String, //private,public
    folderName : String,
    bucketName : String,
    desc: String
});

Api.js

exports.section = function(req, res, next, id) {  

    var fieldSelection = {
        _id: 1,
        name: 1,       
        documents : 1
    };

    var populateArray = [];
    populateArray.push('documents');

    Section.findOne({
        _id: id
    }, fieldSelection)
        .populate(populateArray)
        .exec(function(err, section) {
            if (err) return next(err);
            if (!section) return next(new Error('Failed to load Section ' + id));
            // Found the section!! Set it in request context.
            req.section = section;
            next();
    });
}

このようにすると、「ドキュメント」オブジェクトは [] になります。ただし、「populateArray.push('documents');」を削除すると、['5adfsadf525sdfsdfsdfssdfsd'] -- いくつかのオブジェクト ID (少なくとも)

ポピュレートする必要がある方法を教えてください。

ありがとう。

4

2 に答える 2

1

クエリを次のように変更します

Section.findOne({
        _id: id
    }, fieldSelection)
        .populate('documents.type')
        .exec(function(err, section) {
            if (err) return next(err);
            if (!section) return next(new Error('Failed to load Section ' + id));
            // Found the section!! Set it in request context.
            req.section = section;
            next();
    });

これは機能します。入力するパスを指定する必要があります。

于 2014-10-01T17:58:27.313 に答える
0

後で入力する ObjectID の配列を指すスキーマ内の「ドキュメント」だけが必要な場合。その後、これを使用できます。

var SectionSchema = new Schema({
name: String,
documents : [{
        type: Schema.ObjectId,
        ref: 'Document'
    }]    
});

そして、以下を使用して入力します

 Section.findOne({
        _id: id
    }, fieldSelection)
        .populate('documents')
        .exec(function(err, section) {
            if (err) return next(err);
            if (!section) return next(new Error('Failed to load Section ' + id));
            // Found the section!! Set it in request context.
            req.section = section;
            next();
    });
于 2016-11-14T06:28:12.690 に答える