嵌入文档 - MongoDB with Mongoose

Embedding a document - MongoDB with Mongoose

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

@interface CategorySub : MTLModel <MTLJSONSerializing>

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

@end

这是 Mongoose CategorySub 架构定义:

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 文档之一是这样的:

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

看起来您的创建代码只保存了 _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] });

请在此处查看文档:http://mongoosejs.com/docs/subdocs.html

希望对您有所帮助。