gpt4 book ai didi

javascript - $addToSet 到一个数组,但它给了我 null

转载 作者:可可西里 更新时间:2023-11-01 10:00:04 27 4
gpt4 key购买 nike

所以基本上我有一个愿望 list ,我有一堆我想使用放置请求添加到愿望 list 产品数组中的产品(顺便说一句,我正在使用 postman )。这是愿望 list 模式,是的,我知道数据库中的文档名称是“whishlist”......我讨厌拼写错误

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ObjectId = mongoose.Schema.Types.ObjectId;

var whishList = new Schema({
title: {type: String, default: "Cool whishlist"},
products:[{type: ObjectId, ref:'Product'}]
});

module.exports = mongoose.model('WhishList', whishList);

这是产品模式

var mongoose = require('mongoose');
var Schema = mongoose.Schema;


var product = new Schema({
title: String,
price: Number,
likes: {type: Number, default: 0}
});


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

现在这是我要运行的代码

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var db = mongoose.connect('mongodb://localhost/swag-shop');

var Product = require('./model/product');
var wishList = require('./model/wishlist');
app.put('/wishlist/product/add', function(request, response){
Product.find({_id: request.body.productId}, function(err, product){
if(err) {
response.status(500).send({err: "could not add item to wishlist"});
}else{
wishList.update({_id: request.body.wishlistId},{$addToSet: {products: product._id}}, function(err, wishlist){
if(err){
response.status(500).send({err: "could not add item to wishlist /update/"});
}else{
response.send(wishlist);
}
});
}
});

我真的看不出问题出在哪里我尝试删除文档并重新发布但我遇到了同样的问题。提前致谢

最佳答案

问题在于,如果查询匹配集合中的任何文档而不是您想要的单个文档,则 Product.find() 的结果是一个 Mongoose 文档数组。

因此表达式 {$addToSet: {products: product._id}} 解析为 {$addToSet: {products: undefined}} 因为 product 是一个数组,product._id 未定义。以这个简单的例子为例

var product = [{ '_id': 1 }];
console.log(product._id) // logs undefined

要解决这个问题,您可以访问数组中的唯一元素

wishList.update(
{ '_id': request.body.wishlistId },
{ '$addToSet': { 'products': product[0]._id} },
function(err, wishlist) { ... }
);

或者使用findOne()方法查询产品时返回单个文档:

Product.findOne({ '_id': request.body.productId }, function(err, product) {
if(err) {
response.status(500).send({err: "could not add item to wishlist"});
} else {
wishList.update(
{ '_id': request.body.wishlistId },
{ '$addToSet': { 'products': product._id } },
function(err, wishlist) { ... }
);
}
});

findById() 方法在这种情况下也很有用,即

Product.findById(request.body.productId, function(err, product) {
if(err) {
response.status(500).send({err: "could not add item to wishlist"});
} else {
wishList.update(
{ '_id': request.body.wishlistId },
{ '$addToSet': { 'products': product._id } },
function(err, wishlist) { ... }
);
}
});

关于javascript - $addToSet 到一个数组,但它给了我 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49016658/

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