集合引用如何在mongoose中工作?

时间:2017-02-08 19:59:21

标签: javascript node.js mongodb mongoose

我第一次尝试在mongoose中使用refrence,所以我想了解我是否要保存带有用户ID的模板,我们是否需要从客户端获取createdBy值或如何将其插入到templateSchema。基本上我想在用户保存模板时保存用户ID _id。我能够保存模板,但我没有收到任何错误,createdBy属性没有保存到模板集合中。任何外行的解释,以了解猫鼬的退却,以及我如何使用下面的代码。

user.js的

var UserSchema = new mongoose.Schema({
  _id: { type: String, required: true, index: {unique: true}},
  firstName: String,
  lastName: String,
  type: String,
  groups:[{type: String, ref: 'Group', required: false}]
},
  {
    toObject: {
      virtuals: true
    },
    toJSON: {
      virtuals: true
    }
  });

template.js

var User = require('../user/user.model.js');

var TemplateSchema = new mongoose.Schema({
  _id: { type: String, required: true},
  name: String,
  id: String,
  appliesTo: [],
  properties: [],
  createdBy: { type: mongoose.Schema.Types.ObjectId, ref: 'User'}
 });

templateCtrl.js

var eTemplate = require('./template.model');

var templatesJavaClass = {
          "_id": 12586,
          "name": "Java Class",
          "id": "javaClass",
          "appliesTo": [
              "bpmn:UserTask"
          ],
          "properties": [{
              "label": "Java Package Name",
              "type": "String",
              "editable": true,
              "binding": {
                  "type": "property",
                  "name": "camunda:class"
              }
          }],
        "createdBy": "user1"
      }

 var template = new eTemplate(templatesJavaClass);

 template.save(function(error){
  console.log("successfully saved template");
  if (error){
    console.log(error);
  }
 });

1 个答案:

答案 0 :(得分:0)

在创建/保存文档时,您需要将用户_id放在createdBy文档的template字段中。

另外,请确保其类型为ObjectId,而不是string。否则你可能会得到Cast Error

试试这个:

var templatesJavaClass = {
    "_id": 12586,
    "name": "Java Class",
    "id": "javaClass",
    "appliesTo": [
        "bpmn:UserTask"
    ],
    "properties": [{
        "label": "Java Package Name",
        "type": "String",
        "editable": true,
        "binding": {
            "type": "property",
            "name": "camunda:class"
        }
    }],
  //save users _id in createdBy field
  "createdBy": user1._id;//assuming user1 is the users document
}

var template = new eTemplate(templatesJavaClass);

template.save(function(error){
    console.log("successfully saved template");
    if (error){
      console.log(error);
    }
});