在MongoDB上创建和保存模型记录

时间:2018-05-02 23:15:41

标签: javascript mongodb express mongoose mongoose-schema

我目前在FreeCodeCamp的MongoDB和Mongoose部分。

{{3}}要求用户使用之前构建的Person构造函数创建文档实例。将具有字段名称,年龄和favoriteFoods的对象传递给构造函数。它们的类型必须符合Person Schema中的类型。然后在返回的文档实例上调用方法document.save()。使用Node约定传递回调。

我已经创建了人员架构和构造函数,但我不太确定仍然缺少什么以及如何将它们拼凑在一起以实现解决方案。有人可以帮忙解释一下吗?

var mongoose = require("mongoose");
mongoose.connect(process.env.MONGO_URI);

var Schema = mongoose.Schema;

var personSchema = new Schema({
  name:  {
    type: String,
    required: true
  },
  age: Number,
  favoriteFoods:   [String]
});

var Person = mongoose.model('Person', personSchema);

var joe = new Person({
  name: "Joe",
  age: 24,
  favoriteFoods: ['Apple', 'Banana']
});

joe.save(function(err, persons) {
  if(err){
    console.log("Failed");
  } else {
    console.log("Saved Successful");
    console.log(persons);
  }
});

var createAndSavePerson = function(done) {

  done(null /*, data*/);

};

4 个答案:

答案 0 :(得分:3)

@SQMN具有正确的解决方案。除了the FCC prompt表示我们首先要根据Person模型创建一个新文档并将数据添加到它之前,我们先保存它。

var Person = mongoose.model('Person', personSchema);

var p = new Person;
p.name = "John";
p.age = 18;
p.favoriteFoods = ["hotpot", "suantangyu"];
var createAndSavePerson = function(done){
  p.save(function(err, data){
    if (err){
      return done(err);
    }
    return done(null, data);
  });
};

答案 1 :(得分:0)

我还没有研究过你刚用过的方法。但是mongoose拥有自己的方法create(obj,callback),它可以为你完成大部分工作。您可以像这样使用它:

var mongoose = require("mongoose");
mongoose.connect(process.env.MONGO_URI);

var Schema = mongoose.Schema;

var personSchema = new Schema({
  name:  {
    type: String,
    required: true
  },
  age: Number,
  favoriteFoods:   [String]
});

var Person = mongoose.model('Person', personSchema);

Person.create({
  name: "Joe",
  age: 24,
  favoriteFoods: ['Apple', 'Banana']
},function(err,result){
    //code to manage error or result if Successful
});

答案 2 :(得分:0)

这与freeCodeCamp中的挑战有关:

如果您想完成此挑战,请向下滚动模板Create & Save Record文件,该文件包含正确的说明和每一步的功能声明。您会发现带有createAndSavePerson()的空函数,请在其中编写您的逻辑。

答案 3 :(得分:0)

根据FCC论坛用户dnlnav,您将要移动实例并将函数保存到createAndSavePerson并重写传递给save的回调,如下所示:

var createAndSavePerson = function(done) {
  var joe = new Person({
    name: "Joe",
    age: 24,
    favoriteFoods: ['Apple', 'Banana']
  });

  joe.save((err, data) => {
    if (err)
      return done(err);
    return done(null, data);
  });
};