如何将项目添加到猫鼬数组

时间:2020-10-26 03:19:39

标签: node.js mongodb mongoose

我正在开发一个使用mongodb数据库的Web应用程序,并在node.js中使用mongoose ... 现在,我正在尝试构建评分功能,在此功能中,人们可以对商店进行评分并提供有关该商店的一些评论。 这是结构:

rate: {
  author: req.body.author,
  text: req.body.text
}

要对其进行更新,我使用的是“ findOneAndUpdate”功能,但是,总是在执行此操作时,新的覆盖率会覆盖现有的速率...你们可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

您可以在这里做。我只是举例说明

型号

//Model
const ratingSchema = new mongoose.Schema({
    author: { type: String, required: true },
    text: { type: String, required: true }
});

const productSchema = new mongoose.Schema({
    name: { type: String, required: true },
    description: { type: String },
    rating: [ratingSchema],
    price: { type: Number, default: 1 },
});

module.exports = mongoose.model('Product', productSchema );

现在您可以推送一个新数组

控制器

const ProductModel = require('./models/product');

const { id } = req.params;
const { author, text } = req.body;

PersonModel.update(
    { _id: id }, 
    { $push: { rating: { author, text }} },
    done
);

更多关于:https://mongoosejs.com/docs/api/array.html#mongoosearray_MongooseArray-push

答案 1 :(得分:0)

尝试这个

模型

const schema = new mongoose.Schema({
    name: String,
    description: String,
    price: Number,
    rating: [{
       author : String,
       text : String
    }]
    
});

module.exports = mongoose.model('Product', schema );

在请求处理程序中

const Product = require('./models/product');

const { id } = req.params; //product ID
const { author, text } = req.body;

const product = Product.findById(id);

product.rating = [...product.rating,{ author, text }]
product.save();

答案 2 :(得分:0)

一种方法是使用常规JS,您可以简单地将要更新的文档存储在变量中。然后,在对变量调用[{"ModelType": "Bar"}]之前,在https://thehost/dosomething/enumerable字段上使用push方法。