我有地址模式和客户模式。我的客户架构中有一个字段地址数组。我将发送一个地址模型作为我的请求正文,并将客户ID作为请求参数。如何将该地址保存到在客户模式中声明的地址数组?
这是我的客户架构
const customerSchema = mongoose.Schema ({
_id: mongoose.Schema.Types.ObjectId,
name: String,
phone_number: String,
password: String,
type:{type:String,enum:['admin','user']},
adresses:['Adress'],
orders:[{type: mongoose.Schema.Types.ObjectId, ref: 'Order'}]
});
这是我的地址架构
const addressSchema= mongoose.Schema({
_id:mongoose.Types.ObjectId,
postalCode:Number,
city:String,
district:String,
neighborhood:String,
streetNumber:String,
no:Number,
buildingName:String,
apartmentNumber:Number,
floor:Number,
coordinates:{
latitude:Number,
longitude:Number
},
addressName:String,
customerId: {type: mongoose.Schema.Types.ObjectId,ref:'Customer'}
});
我不知道我该怎么做。我正在寻找将要推送我的地址的客户。
这是我如何获得特定客户的方法
Customer.find({_id:req.params.customerId},(err,data)=>{
if(err) return next(err);
else{
//What I am going to do here?
}
});
首先我应该在客户模式内部的地址数组中放入哪种类型?
在找到要添加地址的客户之后,我该怎么办?猫鼬5.4.11文档对我来说还不够。该链接似乎是我所需要的,但我没有弄清楚如何解决此问题。
答案 0 :(得分:0)
好的,所以您基本上要寻找的是:关联。您需要在用户模型和客户模型之间建立连接。
我们将说,地址属于用户和用户引用地址对象,例如id。
考虑一个例子:
const personSchema = Schema({
_id: Schema.Types.ObjectId,
name: String,
age: Number,
stories: [{ type: Schema.Types.ObjectId, ref: 'Story' }]
});
const storySchema = Schema({
author: { type: Schema.Types.ObjectId, ref: 'Person' },
title: String,
fans: [{ type: Schema.Types.ObjectId, ref: 'Person' }]
});
const Story = mongoose.model('Story', storySchema);
const Person = mongoose.model('Person', personSchema);
现在让我们尝试将作者分配给特定的已创建故事:
const author = new Person({
_id: new mongoose.Types.ObjectId(),
name: 'Ian Fleming',
age: 50
});
author.save(function (err) {
if (err) return handleError(err);
const story1 = new Story({
title: 'Casino Royale',
author: author._id // assign the _id from the person
});
story1.save(function (err) {
if (err) return handleError(err);
// thats it!
});
});
定义故事和人物之间的关系时,很容易操纵它们之间的引用。
在这种情况下,您应该在模型中定义参考,然后您就可以操纵字段:
Customer.findOne({_id:req.params.customerId}, function(error, customer) {
if (error) {
return handleError(error);
}
customer.address = newAddress; // set customer's address to the desired address
// console.log(customer.address.city);
});
检查doc,了解更多信息。