mongoose:向文档添加单个子文档

时间:2017-07-17 22:18:16

标签: node.js mongodb mongoose mongoose-schema

如何将单个子文档添加到mongoose文档?请考虑使用typescript编写的以下场景:

ParentSchema: Schema = new Schema({
    name: String,
    child: ChildSchema
});

ChildSchema: Schema = new Schema({
    name: String
});

我想在创建新父级时向父级添加一个新子级。对于我的代码示例,将创建新父级,但子级永远不会添加到父级。孩子一直显示为null。这是我目前的保存逻辑:

let parentdoc = new this._model(iparent);//base repository protetected member

      parentdoc.save((err: any, result: IParentModel) => {
          if (err) {
              reject(err);
          }

          result.child = new Child(child);
          result.update(null, (err: Error, results1: IParentModel) => {
              if (err) {
                  reject(err);
              }

                  resolve(result1);
          });
      });


where this._model = mongoose.model<IParentModel>("Parent", ParentSchema)

在此代码中,什么会导致父级保存而不是子级?

1 个答案:

答案 0 :(得分:0)

看起来您没有向update方法发送任何值,因此您可以再次保存文档以将子项添加到父级:

parentdoc.save((err: any, result: IParentModel) => {
          if (err) {
              reject(err);
          }

          result.child = new Child(child);
          result.save(null, (err: Error, results1: IParentModel) => {
              if (err) {
                  reject(err);
              }

                  resolve(result1);
          });
      });

或者在更新方法中设置子项:

parentdoc.save((err: any, result: IParentModel) => {
          if (err) {
              reject(err);
          }

          const child1 = new Child(child);
          result.update(null, { $set: { child: child1, } }, null, (err: Error, results1: IParentModel) => {
              if (err) {
                  reject(err);
              }

                  resolve(result1);
          });
      });