gpt4 book ai didi

javascript - 无法使用 Mongoose 将对象添加到 mongodb 中的数组中?

转载 作者:行者123 更新时间:2023-11-30 17:26:45 29 4
gpt4 key购买 nike

我正在使用 nodejs 和 mongodb 创建一个应用程序,我有这个:

var mongoose = require('mongoose');
var db = mongoose.connect("mongodb://localhost/dbTienda");

var esquemaUsuarios = new mongoose.Schema({
nombre: String,
apellido: String,
email: String,
contrasena: String,
notificaciones: Number,
notificacionesLista: [String],
articulos_vendidos: Number,
productos: [{
nombre: String,
imgPath: String,
precio: Number,
ciudades: [String],
tags: [String],
descripcion: String
}]
}), usuarios = db.model("Usuarios",esquemaUsuarios);

问题是我不能在productos中添加任何东西,我的想法是做一些这样的

productos: {
{nombre:XXXXX,imgepath:XXXXX,precio:XXXXX,ciudades:{ XXXXX },tags:{ XXXXX },descripcion: XXXXX},
{nombre:XXXXX,imgepath:XXXXX,precio:XXXXX,ciudades:{ XXXXX },tags:{ XXXXX },descripcion: XXXXX},
{nombre:XXXXX,imgepath:XXXXX,precio:XXXXX,ciudades:{ XXXXX },tags:{ XXXXX },descripcion: XXXXX},
{nombre:XXXXX,imgepath:XXXXX,precio:XXXXX,ciudades:{ XXXXX },tags:{ XXXXX },descripcion: XXXXX}
}

我想添加很多对象,例如第一个对象可能是手机,其次是电视......等等。我不能添加任何东西,我正在使用这个:

mongoose.model('Usuarios').update({
productos:[{$pushAll:{
nombre: informacion.pNombre,
imgPath: informacion.pImagen,
precio: informacion.pPrecio,
ciudades: informacion.pCiudades,
tags: informacion.pTags,
descripcion: informacion.pDescripcion
}},{upsert:true}]
});

但是没用!我可以编辑 nombre apellido 电子邮件...等等,但我不能使用 productos。

最佳答案

这里的问题在于 .update() 的使用方法和您要使用的实际运算符是 $push .

update 方法将它的第一个参数作为“查找”要更新的文档的查询,第二个参数是实际的更新语句。所以在你的情况下:

mongoose.model('Usuarios').update(
{ /* query to match document(s) */ },
{
"$push": {
nombre: informacion.pNombre,
imgPath: informacion.pImagen,
precio: informacion.pPrecio,
ciudades: informacion.pCiudades,
tags: informacion.pTags,
descripcion: informacion.pDescripcion
}
},
{ upsert:true },
function(err,numAffected) {

}
);

如果您的“查询”条件实际上不匹配您集合中的任何文档,您为 upsert 设置的“选项”将创建一个"new"文档。

如果您不打算更新多个文档,那么您的用法可能更适合 .findOneAndUpdate().findByIdAndUpdate()方法代替。

仅供注释,$pushAll运算符实际上在最近的 MongoDB 版本中已被弃用,首选方法是使用 $each修饰符结合 $push .这是因为此功能也与 $addToSet 共享。运营商以同样的方式。预期用途是一次添加“多个”数组项。

关于javascript - 无法使用 Mongoose 将对象添加到 mongodb 中的数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24103201/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com