当前位置: 首页 > 知识库问答 >
问题:

node js javascript中的map.get()在从mongodb获取数据时总是返回未定义的

赵俊晤
2023-03-14

我在这里使用的是一个映射,我在其中存储了id:quantity pair我想将这个数量添加到每个产品数组(包含对象)中,并且我正在通过map.get(id)方法获取这个数量,尽管id的类型和传递到get函数中的id具有相同的值和数据类型,但是我没有定义,我尝试验证了map和传递的id中id的类型和值,两者都是相同的。但是问题仍然存在

这是错误的代码,实际上我是通过这个函数返回一个承诺

var cartMap = new Map();
for (let i = 0; i < this.cart.items.length; i++) {
    const e = this.cart.items[i];
    cartMap.set(mongodb.ObjectId(e._id), e.quantity);
}
db.collection("products").find({ _id: { $in: [...productIds] } }).toArray().then((products) => {
    console.log(cartMap);
    let newProd = products.map(prod => {
        console.log(cartMap.get(prod._id)); // returns undefined
        prod.quantity = cartMap.get(prod._id);
        // cartMap.set(prod._id, -1);
        return prod;
    })
    console.log(newProd);
    if (productIds.length > products.length) {
        let garbageCart = cartMap.keys().filter(prod => {
            if (cartMap.get(prod) != -1) {
                return prod;
            }
        })
        garbageCart.sort();
        this.cart.items.sort();
        let i = 0;
        let updatedCart = this.cart.items.filter(prod => {
            if (i >= garbageCart.length) {

            }
            else if (prod._id == garbageCart[i]) {
                i++;
            }
            else {
                return prod;
            }
        })
        db.collection("users").updateOne({ _id: this.id }, {
            $set: { cart: updatedCart }
        })
    }
    resolve(newProd);

控制台消息

Map(2) { 608c49bca4d1ed0bfc8c41fb => 1, 608c4a41a4d1ed0bfc8c41ff => 1 }
undefined
undefined
[
  {
    _id: 608c49bca4d1ed0bfc8c41fb,
    title: 'chhole bhature',
    description: 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Qui dolor ratione officia quam magni sed, consequuntur maiores illo labore quas molestiae suscipit asperiores beatae voluptatem saepe commodi explicabo perspiciatis non sequi in praesentium illum, nesciunt iste.',   
    price: '1000',
    imageurl: 'imageurl',
    userId: null,
    quantity: undefined
  },
  {
    _id: 608c4a41a4d1ed0bfc8c41ff,
    title: 'hat',
    description: 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Qui dolor ratione officia quam magni sed, consequuntur maiores illo labore quas molestiae suscipit asperiores beatae voluptatem saepe commodi explicabo perspiciatis non sequi in praesentium illum, nesciunt iste.',   
    price: '478',
    imageurl: 'imageurl',
    userId: null,
    quantity: undefined
  }
]

共有1个答案

东博瀚
2023-03-14

这是因为mongodb.objectid(e._id)prod._id是对内存中两个不同位置的引用,因此它们不会相互比较为相等--尽管我知道这些位置上可用的对象表示相同的objectid

为了说明这一点:

var map = new Map()
// object1 and object2 represent the same object, but point to different locations in memory
var object1 = createObject()
var object2 = createObject()

map.set(object1, "some value")

console.log(map.get(object1))   // output: "some value"
console.log(map.get(object2))   // output: undefined

function createObject() {
    return {
        key: "value"
    }
}

您可以使用这些对象字符串表示作为映射的键--通过使用它们的objectid.toString()方法转换它们。由于它们是值类型(而不是引用类型),表示相同字符序列的字符串将相互比较为相等。

 类似资料:
  • 问题内容: 我有一个要通过ajax提交的表格。我正在使用jquery表单插件。我想做的是获取从服务器返回的“ Location”标头。我可以在萤火虫中看到它。但是,每当我在成功回调中调用getResponseHeader()函数时,它总是返回“ undefined”。 码: 位置未定义。但是我可以在Firebug中看到“ Location”标头。我想念什么?即使我从xhr对象调用getAllRes

  • 我正在使用下面的gql查询生成一个GraphQL请求。 但是当我在下面的代码中注销它时,它返回未定义的。 知道我做错了什么吗?该怎么纠正?

  • 我刚刚开始学习平均堆栈,我被卡住了。我需要将下面的查询数据发送到前端。 我试过这样做,但没有成功

  • 我通过jQuery ajax调用一个Web服务。在浏览器中检查时,从服务返回的响应似乎很好,如下所示: 当我通过jQueryAjax调用得到相同的结果时,它显示为未定义。 此处“数据”显示为对象文档, “cont”显示为未定义 当我试图提醒“jqxhr”参数时,它显示了来自web服务的所有数据,并且状态为OK。我在大多数帖子和博客上都试过了,但都找不到哪里出了问题。请帮忙。

  • Apollo客户端在react应用程序上返回未定义的数据,但在gql游乐场上返回数据,我不明白为什么它不能在客户端工作,但在graphql游乐场上工作。 图式 我已经为用户查询定义了union,用于错误处理。

  • 我有一个返回值的函数: 这是在另一个函数中调用的: 当我调用上述函数时,该值显示为未定义,在日志中,它在调用之前显示。 有什么建议吗?