我正在使用MongoDB,Mongoose,Node.js,Express.js创建简单的RestApi,其中将有多个用户和更多用户可以注册,并且将在用户集合(数据库)中为每个用户创建一个条目。我的用户架构(users.js)就像
var mongoSchema = mongoose.Schema;
var userSchema ={
mobileno: {
type:String
},
firstname: {
type:String
},
lastname: {
type:String
},
facebookid: {
type:String
},
userimage: {
type:String
}
}
module.exports = mongoose.model('user', userSchema);
现在每个用户可以保存一个或多个产品,如下所示
现在哪一个是最好的解决方案:
我个人的选择是第二个,但我是MongoDB和Mongoose环境中的新手。请帮助我改变用户架构。
答案 0 :(得分:1)
你可以这样做:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var userSchema = new Schema{
mobileno: {
type:String
},
firstname: {
type:String
},
lastname: {
type:String
},
facebookid: {
type:String
},
userimage: {
type:String
}
}
var productSchema = new Schema{
_user:{type: Schema.ObjectId, ref: 'user'}
prod_name: {
type:String
},
prod_cost: {
type:String
}
}
module.exports = mongoose.model('user', userSchema);
module.exports = mongoose.model('products', productSchema);
您可以将用户引用到产品表(i,.e,就像在mysql中加入一样)
在获取个人资料时填充:
Models.products.find(criteria, projection, options).populate([
{path: '_user', select: 'prod_name, prod_cost'},
]).exec(callback);
谢谢&此致
答案 1 :(得分:0)
通常优选第二种选择。 product
键的架构看起来像 -
products: [productname: String, productdesc: String, ]
但是,在某些情况下,创建单独的product
集合的第一个选项更有意义。如果集合依赖于某些外部源并且本质上是相当动态的,则会发生这种情况。在这里,您会发现在一个地方而不是很多地方更新更容易。在这种情况下,您可以使用类似
products: [productSchema]
为了获取产品详细信息,您需要执行$lookup
操作
答案 2 :(得分:0)
我认为,更好的方法是其他方式。
然后使用populate()填充产品中的用户(如果需要)。
答案 3 :(得分:0)
在阅读现有的堆栈溢出答案后,我认为以下方法是正确的。如果我错了,请建议或纠正我。
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var productSchema = new Schema{
prod_name: {
type:String
},
prod_cost: {
type:String
}
}
var userSchema = new Schema{
mobileno: {
type:String
},
firstname: {
type:String
},
lastname: {
type:String
},
facebookid: {
type:String
},
userimage: {
type:String
},
products: [productSchema]
}
module.exports = mongoose.model('user', userSchema);
module.exports = mongoose.model('products', productSchema);