[英]One to Many Relationship MongoDb Using Mongoose
我正在創建用戶和地址之間的關系。 用戶可以有多個地址。 這是我的架構:
userSchema.js
const mongoose = require('mongoose')
const Schema = mongoose.Schema
const Address = require('./addressSchema')
let userSchema = mongoose.Schema({
name :String,
age : Number,
cohort :String,
addresses : [{type : Schema.Types.ObjectId, ref : 'Address'}]
})
let User = mongoose.model('User',userSchema)
module.exports = User
addressSchema.js
const mongoose = require('mongoose')
let addressSchema = mongoose.Schema({
city : String,
state :String
})
let Address = mongoose.model('Address',addressSchema)
module.exports = Address
添加新用戶和地址(app.js)
let user = new User({name : 'Mary', age : 36, cohort : 2019})
let address = new Address({ city : 'Houston', state : 'TX'})
user.addresses.push(address)
user.save(function(error,newUser){
console.log(newUser)
})
獲取用戶及其地址 //獲取所有用戶
User.find(function(error,users){
users.forEach((user) => {
console.log('addresses')
user.addresses.forEach((address) => {
console.log(address.city) // prints undefined
})
})
})
有什么想法我做錯了嗎?
這取決於您要完成的工作:將地址作為嵌入式文檔存儲在用戶中, 或將對地址文檔的引用存儲在用戶中。 上面的示例代碼混合了兩種方法,您已經注意到它們不起作用。
合並架構:
const mongoose = require('mongoose')
const Schema = mongoose.Schema
const addressSchema = Schema({
city : String,
state :String
})'
const userSchema = Schema({
name :String,
age : Number,
cohort :String,
addresses : [addressSchema]
});
const User = mongoose.model('User',userSchema);
其余代碼可以保持不變。
現有的架構和模型聲明保持不變。
然后,在存儲數據時,還需要存儲地址:
const user = new User({name : 'Mary', age : 36, cohort : 2019})
const address = new Address({ city : 'Houston', state : 'TX'})
user.addresses.push(address)
Promise.all([
user.save(),
address.save()
]).then(([newUser, newAddress]) => {
console.log({newUser, newAddress});
});
最后,在獲取文檔時,如果要包含該地址,則需要填充該地址:
User.find().populate('addresses').exec().then((users) => {
users.forEach((user) => {
user.addresses.forEach((address) => {
console.log({user, address});
});
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.