简体   繁体   English

如何在嵌套的 mongodb 文档中插入值?

[英]How to insert value in a nested mongodb document?

I have this document:我有这个文件:

{
  "_id": {
    "$oid": "63cf19337c2df5fe442a2b69"
  },
  "createdAt": {
    "$date": {
      "$numberLong": "1674516787623"
    }
  },
  "updatedAt": {
    "$date": {
      "$numberLong": "1675035206032"
    }
  },
  "clientIp": "89.132.225.21",
  "products": {
    "6cc5a480-91f0-4aa8-975c-013d6bd155a3": {
      "currency": "EUR",
      "title": "VVV",
      "price": "12",
      "barionId": "aa@aa.hu",
      "ratingTimeLength": 12
    }
  }
}

I would insert like this:我会这样插入:

const userId = req.query.userId
            const productId = req.query.productId
            const token = authorization.slice(7)
            const userJWT = jwt.verify(token, process.env.JWT_SECRET) as JwtPayload
            const ObjectId = require('mongodb').ObjectId
            const id = new ObjectId().toHexString()
            await collection.updateOne(
                { _id: ObjectId(userId), [`products.${productId}`]: { $exists: true } },
                {
                    $set: {
                        [`products.$.payments.${id}`]: {
                            createdAt: new Date(),
                            createdBy: userJWT.userId,
                        },
                    },
                },
                { upsert: true }
            )

But it raise:但它提出:

2023-01-29T23:43:33.653Z 1a42849c-d5aa-4127-8fdc-9169c1c6c405 ERROR MongoServerError: The positional operator did not find the match needed from the query. 2023-01-29T23:43:33.653Z 1a42849c-d5aa-4127-8fdc-9169c1c6c405 错误 MongoServerError:位置运算符未从查询中找到所需的匹配项。

When I query record in Compass, it returns the document:当我在 Compass 中查询记录时,它返回文档:

{
"_id": ObjectId("63cf19337c2df5fe442a2b69"),
"products.6cc5a480-91f0-4aa8-975c-013d6bd155a3": {
"$exists": true
}
}

What is wrong?怎么了?

You should access the products property directly with:您应该直接访问products属性:

await collection.updateOne(
  { _id: ObjectId(userId), [`products.${productId}`]: { $exists: true } },
  {
    $set: {
      [`products.payments.${id}`]: {
        createdAt: new Date(),
        createdBy: userJWT.userId,
      },
    },
  },
  { upsert: true }
);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM