【问题标题】:how to post and update schema within schema array and print it?如何在模式数组中发布和更新模式并打印它?
【发布时间】:2016-08-28 08:08:00
【问题描述】:

您好,我是 node js 和 mongoose 的新手 我有两个方案,我想在另一个模式中有模式对象 我的计划

user.js

// grab the things we need
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var Genre = require('../Models/genre');

// create a schema
var userSchema = new Schema({
  name: { type: String, required: true, unique: true , index:true},
  email: { type: String, required: true, unique: true },
  password: { type: String, required: true },
  age: String,
  gender: String,
  genres: [{type: Schema.ObjectId, ref: Genre.Genre}] //this is the genre schema - the user can have many genres
});

// the schema is useless so far
// we need to create a model using it
var User = mongoose.model('User', userSchema);

// make this available to our users in our Node applications
module.exports = User;

也试过做

genres: [{type: Schema.Type.ObjectId, ref: Genre.Genre}]
and genres: ['Genre']

和genre.js

// grab the things we need
var mongoose = require('mongoose');
var Schema = mongoose.Schema,
    ObjectId = Schema.ObjectId;

// create a schema
var genreSchema = new Schema({
  name: { type: String, required: true, unique: true, index: true },
  age: String,
  gender: String
});

// the schema is useless so far
// we need to create a model using it
var Genre = mongoose.model('Genre', genreSchema);

// make this available to our genres in our Node applications
module.exports = Genre;

首先我想知道它是否可以做到这一点?有更好的方法吗?

当我通过邮递员发布用户时,用户正在添加,但我没有得到完整的流派,我不知道它是否保存正确

这是我发布的 json

{
"name":"erez",
"age": "23",
"password":"erez1234",
"email":"erez@erez.com",
"gender":"Male",
"genres": ["57285fe32c3c15e40c000001"] /// what should be here? is it right?
}

这是获取用户的 json

[
  {
    "_id": "572874be9b43cb4834000002",
    "name": "erez",
    "age": "23",
    "password": "yaniv1234",
    "email": "erez@beatman.com",
    "gender": "Male",
    "__v": 0,
    "genres": [
      "57285fe32c3c15e40c000001"
    ]
  }
]

如果它是正确的 如何在获取用户时发送所有类型的完整用户?

希望我足够清楚

感谢帮助

【问题讨论】:

    标签: node.js mongodb mongoose schema populate


    【解决方案1】:

    定义引用时,ref 属性必须与模型定义中的模型名称完全匹配,否则会出现错误。 ref 的值应该是字符串,而不是你做的对象,所以正确的方式应该是

    genres: [{type: Schema.ObjectId, ref: 'Genre'}] 
    

    当您阅读数据时,Mongoose 人口通过其 populate() 函数可以非常简单地读取文档。因此,例如,要显示特定用户的引用类型,请调用 populate() 方法,并将字符串中该字段的名称作为参数,例如

    User.findOne({"name": "Tom"})
        .populate("genres")
        .exec(err, user) { ... }
    

    【讨论】:

    • 所以我做的帖子用户是正确的?我可以为所有用户填充吗?还是只有findone?也可以通过 findById 函数完成??
    • 是的,您写入数据的方式是正确的。与阅读部分一样,find()findOne() 方法中的任何一个都可以链接populate() 函数,我只是以 findOne 为例。如果您想为所有用户填充,这也可以扩展到 find() 方法。
    • User.find() .populate("genres") .exec(function (err, users) { if (err) res.send(err); res.json(users); }) ; ---- 适用于所有用户的功能
    猜你喜欢
    • 1970-01-01
    • 2021-03-29
    • 2017-12-29
    • 2022-10-17
    • 2010-10-25
    • 2015-02-16
    • 2021-05-24
    • 2014-09-29
    • 1970-01-01
    相关资源
    最近更新 更多