Node.js 在子文档数组中使用mongoose$inc

Node.js 在子文档数组中使用mongoose$inc,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我需要实现一个功能,每个产品张贴将增加相应的类别和子类别的产品数量。 这是我的模式: //Subcategory const subcategorySchema = new mongoose.Schema({ title: {type: String}, productsCounts: {type: Number, default: 0}, }); //Category const categorySchema = new mongoose.Schema({ title

我需要实现一个功能,每个产品张贴将增加相应的类别和子类别的产品数量。 这是我的模式:

//Subcategory
const subcategorySchema = new mongoose.Schema({
    title: {type: String},
    productsCounts: {type: Number, default: 0},
});

//Category
const categorySchema = new mongoose.Schema({
    title: {type: String},
    subcategories: [subcategorySchema],
    productsCounts: {type: Number, default: 0}
});

//Method I use to update products count
categorySchema.statics.increaseProductsCounts = function (categoryId, subcategoryId) {
    //Increase category's productCounts.
    this.findByIdAndUpdate(categoryId, {$inc: {productsCounts: 1}}).then(r => {
        console.log(r)
    });
};
以上代码适用于类别productCounts。如何更新特定的子类别productCounts呢?

您可以使用(MongoDB 3.6或更新版本)定义一个条件来标识您的子类别

categorySchema.statics.increaseProductsCounts = function (categoryId, subcategoryId) {
    this.findByIdAndUpdate(categoryId, 
        {$inc: {productsCounts: 1, 'subcategories.$[sub].productsCounts': 1}}, 
        { arrayFilters:[ { 'sub._id': subcategoryId } ] }).then(r => {
            console.log(r);
    });
};
您可以使用(MongoDB 3.6或更新版本)定义一个条件,该条件将标识您的
子类别

categorySchema.statics.increaseProductsCounts = function (categoryId, subcategoryId) {
    this.findByIdAndUpdate(categoryId, 
        {$inc: {productsCounts: 1, 'subcategories.$[sub].productsCounts': 1}}, 
        { arrayFilters:[ { 'sub._id': subcategoryId } ] }).then(r => {
            console.log(r);
    });
};

谢谢你的回复。我已经在我的项目中复制并粘贴了上述代码,但只有类别中的productsCounts增加,而不是特定的子类别。这是我得到的日志{code>{productsCounts:108,{id:5c8ab97c4835f216811d41d,标题:[{productsCounts:0,properties:[],{id:5c8ab99d4835f216811d41e,标题:'Bondeni'},{productsCounts:0,属性:[],{id:5c8ab9ba4835f216811d420,标题:'Tema'}],_v:0}
还有什么问题?在将mongoose版本更新到最新版本后,它现在可以工作了。谢谢你,你能看看我的另一个问题吗。他们是有亲缘关系的@米克尔坦克等待回应。我已经在我的项目中复制并粘贴了上述代码,但只有类别中的productsCounts增加,而不是特定的子类别。这是我得到的日志{code>{productsCounts:108,{id:5c8ab97c4835f216811d41d,标题:[{productsCounts:0,properties:[],{id:5c8ab99d4835f216811d41e,标题:'Bondeni'},{productsCounts:0,属性:[],{id:5c8ab9ba4835f216811d420,标题:'Tema'}],_v:0}还有什么问题?在将mongoose版本更新到最新版本后,它现在可以工作了。谢谢你,你能看看我的另一个问题吗。他们是有亲缘关系的@米克利是猫鼬和猫鼬的初学者。那个问题没用,我是mongoDb和mongoose的初学者。那个问题没用