嵌入文档 - MongoDB与Mongoose

时间:2015-02-12 19:21:02

标签: mongodb mongoose

我是前端iOS开发者,而Mongoose对我来说是新手。我正在尝试将父类别嵌入子类别文档中。这是obj-c数据模型:

@interface CategorySub : MTLModel <MTLJSONSerializing>

@property (nonatomic) NSString* objectId;
@property (nonatomic) NSString* name;
@property (nonatomic) CategoryMain* categoryMain;

@end

这是Mongoose CategorySub架构def:

var CategorySubSchema = new Schema({
  name: { type: String },
  _category_main : { type: String, ref: 'CategoryMain' }
},
{
  collection: 'categories_sub'
}
)

CategoryMain架构,现在只是一个名字:

var CategoryMainSchema = new Schema({
  name: { type: String }
},
{
  collection: 'categories_main'
}
)

这是相关的create代码:

 CategorySub.create({
        name : req.body.name,
        _category_main : req.body.category_main._id
 }, function(err, data){

我在MongoUI中获取的CategorySub文档之一是: enter image description here

如何更改架构def和/或create调用代码以在category_main文档中嵌入CategorySub

1 个答案:

答案 0 :(得分:0)

看起来您的创建代码只保存_id并使用dbref作为子文档的反对。这就是你只获取id而不是整个子文档的原因。

CategorySubSchema
.findOne({ name: 'YOUR NAME' })
.populate('_category_main') // <--
.exec(function (err, subdata) {
 if (err)
      console.log('The creator is %s', subdata.name);
 })

请看这里:http://mongoosejs.com/docs/2.8.x/docs/populate.html

还有另一种方法是使用子文档。在你的情况下,它看起来像这样。:

var CategoryMainSchema = new Schema({
    name: { type: String },
    subCategories: [CategorySubSchema]
});

在创作案例中,您需要执行以下操作:

var categoryMain = new CategoryMainSchema({name: "sub doc", subCategories:     [your  sub document] });

请在此处查看文档:{​​{3}}

我希望有所帮助。