抛出新的 BSONError 传入的参数必须是 12 个字节的字符串或 24 个十六进制字符的字符串,匹配无法聚合

问题描述 投票:0回答:1

var objectID=require('mongodb').ObjectId

router.get('/view-ordered-products/:id',async(req,res)=>{
  console.log(req.params.id)
  let orderProducts=await userHelpers.getOrderedProducts(req.params.id)
  res.render('user/view-ordered-products',{orderProducts})
})
getorderedproducts function is as folllows:

getOrderedProducts:(id)=>{
        return new Promise(async (resolve, reject) => {      
            const cartItems = await db.get().collection(collection.ORDER_COLLECTION).aggregate([
                {
                    $match: { _id:new objectID(id) }
                },
                {
                    $unwind:'$products'
                },
                {
                    $project:{item:'$products.item',quantity:'$products.quantity'}
                },
                {
                    $lookup:{
                        from:collection.PRODUCT_COLLECTION,
                        localField:'item',
                        foreignField:"_id",
                        as:'product'
                    }
                },
                {
                    $project:{
                        item:1,quantity:1,product:{$arrayElemAt:['$product', 0]}
                    }
                }
               
            ]).toArray()
            console.log(cartItems)
            
            resolve(cartItems)
               }) 

这里的

_id 
不能与
new objectID(id)
匹配来访问mongodb数据库中的集合 它显示错误
throw new BSONError('Argument passed in must be a string of 12 bytes or a string of 24 hex characters or an integer');

我尝试过安慰从params获得的id,它是一个字符串

如何匹配数据库中的id

请帮忙

node.js mongodb express aggregation-framework
1个回答
0
投票

引号也通过 url 传递,它应该看起来像这样 http://localhost:3000/view-ordered-products/64fab9e6849734d04c71fd3b 不是, http://localhost:3000/view-ordered-products/'64fab9e6849734d04c71fd3b'

© www.soinside.com 2019 - 2024. All rights reserved.