2

私はここ Stackoverflow で同様の問題を見つけようとしましたが、運がありませんでした。2 つのドキュメント間の関係を作成する適切な方法を見つけるのに苦労しています。これは、階層カテゴリの非常に単純なケースです。各カテゴリは、1 つの親と複数の子を持つことができます。

var categorySchema = Schema({
    name: String,
    parent: { type: Schema.ObjectId, ref: 'Category' },
    children: [{ type: Schema.ObjectId, ref: 'Category' }],
    order: Number
});

var Category = mongoose.model('Category', categorySchema);

新しいカテゴリを作成すると、(もしあれば) 親への _id を取得します。この _id を POST/PUT リクエストから文字列として取得し、この _id を使用してカテゴリをフェッチします。フェッチは正常に機能し、結果として適切なカテゴリを取得します。しかし、これは私が苦労しているところです。マングースクエリから返された結果を使用して、新しいカテゴリとその親の間の関係を作成するにはどうすればよいですか?

var query = Category.find({'_id': parentCategoryID});
query.select('name');
query.exec(function (err, parentCategory) {
    if (!err) {
        console.log("Fetched parentCategory: "+parentCategory+".. parentCategory._id: "+parentCategory._id);
        var parent = parentCategory.toObject();
        var category = new Category();
        category.name = name;
        category.parent = Schema.ObjectId(parent._id);

console.log フェッチされたparentCategory: { name: 'Parent Category', _id: 5218dcd6e6887dae40000002 }..parentCategory._id: undefined

複数の異なる方法で親属性を設定しようとしましたが、機能させることができません。この問題に関するドキュメントを見つけることもできませんでした。

この問題に関するあらゆる助けに非常に感謝しており、この質問に対する回答からより多くの人々が恩恵を受けることを願っています.

4

1 に答える 1

1
//problem 1: `find` returns a list of results. You just need findById
var query = Category.findById(parentCategoryID);
query.select('name');
query.exec(function (err, parentCategory) {
  //Problem 2: don't ignore errors. Handle them first and short-circuit return
    if (err) {
      console.err(err);
      return;
    }
    console.log("Fetched parentCategory: "+parentCategory+".. parentCategory._id: "+parentCategory._id);
    //problem 3: mongoose will do the right thing with your schema here
    //all you need is
    var category = new Category();
    category.name = name;
    category.parent = parentCategory;
    //and don't forget
    category.save(...callback....);
}

また、スキーマがあり、スキーマに一致しないものを割り当てた場合、mongoose はデータをドロップするだけであることに注意してくださいcategory.save()

于 2013-08-24T17:42:39.893 に答える