2016-05-03 33 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