2016-05-03 30 views
2

你好,我是新来节点js和猫鼬 我有两个方案,我想有其他架构中架构对象 我的计划如何发布和更新模式数组中的模式并打印它?

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":"[email protected]", 
"gender":"Male", 
"genres": ["57285fe32c3c15e40c000001"] /// what should be here? is it right? 
} 

,这是让用户JSON

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

如果正确 我怎么能与一个让用户所有类型发送完整的用户?

希望我足够清楚

感谢助理

回答

1

当你定义的引用文件,其ref属性必须在其他模型中定义准确的型号名称相匹配,你会得到一个错误。该ref值应该是一个字符串,而不是一个对象,你所做的一切,所以正确的方法应该是

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

当你正在阅读的数据,猫鼬的人口使读取的文件通过其populate()功能非常简单。因此,举例来说,为了显示特定用户的参考流派,使用字符串中该字段的名称作为参数例如调用方法。

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

所以我发布的帖子用户是正确的?我可以为所有用户填充吗?或只有通过findone?也可以通过findById函数完成? – Erez

+0

是的,你写数据的方式是正确的。和阅读部分一样,任何'find()'或'findOne()'方法都可以链接'populate()'函数,我只是给了findOne作为例子。如果你想为所有用户填充,这可以扩展到'find()'方法。 – chridam

+1

谢谢你帮了我 – Erez