Node.js 我可以在mongoose上加载文档后填充更多字段吗?
我想在加载一个文档后填充传统字段 我正在将我的购物车装载到我正在构建的电子商务上,在所有路线上都是这样:Node.js 我可以在mongoose上加载文档后填充更多字段吗?,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我想在加载一个文档后填充传统字段 我正在将我的购物车装载到我正在构建的电子商务上,在所有路线上都是这样: app.use(function(req, res, next) { Cart.findOne({session: req.cookies['express:sess']}) .populate({ path: "products.product", select: "price name photos slug" }) .exec(function(err, cart){
app.use(function(req, res, next) {
Cart.findOne({session: req.cookies['express:sess']})
.populate({ path: "products.product", select: "price name photos slug" })
.exec(function(err, cart){
if(err){
return err; //TODO: PAG 500
}
if(cart){
res.locals.cart = cart;
} else {
res.locals.cart = new Cart({ session: req.cookies['express:sess']});
}
next();
});
});
但在一个页面上,我希望有更多的字段描述和产品加载的插件。
我试着只装载产品,但是我错过了购物车上的相关数量信息
var CartSchema = new Schema({
products: [{
product: { type: Schema.ObjectId, ref : 'Product' },
quantity: { type: Number, default: 1}
}],
totalItems: { type: Number, default: 0},
message: { type: String },
});
我知道我可以根据我在不同页面字段上的需要,在更多的中间件中进行分解,或者重新加载购物车,我也可以通过两个数组,重新加载的产品和加载到购物车上的产品进行某种合并,但我想mongoose可能有办法做到这一点。你不能“重新填充
”一个填充的字段
用一个简单的if
来确定要填充哪些字段如何。例如:
app.use(function(req, res, next) {
var productSelect;
// This is just an example, you can get the condition from params, body, header..
if (req.body.isMoreField) {
productSelect = 'add more field in here';
}
else {
productSelect = 'less field here';
}
Cart
.findOne({
// ...
})
.populate({
// ...
select: productSelect,
// ...
})
.exec()
.then(function(cart) {
// ...
})
});
这实际上可以做到: 因此,在这种特定的情况下,我需要将这段代码添加到希望cart填充更多字段的函数中,而中间件不需要任何更改 带回调的ES5:
var populate = [
{ path: "products.product", select: "price name photos slug" },
{ path: "card", select: "price name photo"}
];
var cart = res.locals.cart;
cart.populate(populate, function(err, populatedCart) {
res.locals.cart = populatedCart;
next();
});
对于ES6:
const populate = [
{ path: "products.product", select: "price name photos slug" },
{ path: "card", select: "price name photo"}
];
res.locals.cart = await res.locals.cart.populate(populate).execPopulate();
你想要这个吗?或者你的意思是什么?说明和插件字段在哪里?不,我已经在使用填充:“.populate({path:“products.product”,选择:“price name photos slug”})“我想做的是填充更多字段,稍后当我已经加载文档时,为什么不从一开始填充它们?如果以后想获得更多数据,可以根据产品id进行选择。因为我只需要20+中的2页上的那些额外字段,而且它们有点大,我想将其分成不同的中间件更有意义,因为我没有一个简单的参数可以在if上使用。无论如何,我选择你的答案是因为你回答我不能做我想做的事。