returns _id in MongoDB 与 JavaScript 的脚本

Script that returns _id in MongoDB with JavaScript

我需要一个 javascript 代码将 _id 保存在变量中 我在获取 _id 时遇到了问题,因为它在一个数组中。

我找遍了所有地方,但找不到解决方案。

  {
    "_id": {
      "$oid": "626bacea1847f675e47b2bd8"
    },
    "tipo": "conta",
    "data_abertura": {
      "$date": "2013-02-19T00:00:00Z"
    },
    "observacoes": "Sem observações",
    "iban": "PT50000506515926456299903",
    "saldo": 1456.23,
    "bic": "BBPIPTPL001",
    "tipo_conta": "Conta Ordenado",
    "cartoes": [
      {
        "_id": {
          "$oid": "626bacea1847f675e47b2bd7"
        },
        "num_cartao": 4908509005925727,
        "nome_cartao": "João Correia",
        "validade": {
          "$date": "2025-10-03T00:00:00Z"
        },
        "pin": 5609,
        "cvc": 975,
        "estado": "Ativo",
        "tipo_cartao": "Crédito"
      }
    ],
    "permissoes": {
      "levantamentos": true,
      "depositos": true,
      "pagamentos": true,
      "transferencias": true,
      "creditos": true,
      "acoes": true
    },
    "titulares": [
      {
        "$oid": "626bacea1847f675e47b2bd6"
      }
    ]
  }

我要cartoes _id

"cartoes": [
      {
        "_id": {
          "$oid": "626bacea1847f675e47b2bd7"
        },

我想要这样的东西:

let conta = db.banco.findOne({"tipo": "conta"});
idConta = conta._id;

console.log("id: " + idConta);//id: 626bacea1847f675e47b2bd8

编辑:

根据评论,我了解到您想输入 num_cartao 值并获得此 cartao 的 _id 的输出。您可以为此使用聚合:

const cartao_id = await db.collection.aggregate([
  {
    $match: {cartoes: {$elemMatch: {"num_cartao": 4908509005925727}}}
  },
  {
    $project: {
      cartoes: {
        $filter: {
          input: "$cartoes",
          as: "item",
          cond: {$eq: ["$$item.num_cartao", 4908509005925727]}
        }
      }
    }
  },
  {
    $project: {
      data: {"$arrayElemAt": ["$cartoes", 0]}
    }
  },
  {
    $project: {
      _id: {$toString: "$data._id"}
    }
  }
])

console.log(`cartao_id: ${cartao_id}`);//id: 626bacea1847f675e47b2bd7

正如您在此 playground

上所见,这将为您提供您想要的

你先 $match 右边 num_cartao 的文档,然后 $filter 来自 cartoes 数组的右边的 carto,然后你将它格式化为字符串。