繁体   English   中英

使用 nodejs 和 mongoose 从 mongodb 中具有 id 的对象数组中获取元素

[英]Get an element from an array of objects with an id in mongodb using nodejs and mongoose

我有很多这样的文件

user:62e13ae4f9a38f7610e70bd7,
_id :62e13ae4f9a38f7610e70bdb
transactions:{

 {
            "amount": 50,
            "category": "Bills",
            "type": "Expense",
            "date": "2022-01-20T00:00:00.000Z",
            "_id": "62e13ae4f9a38f7610e70be0"
        },
        {
            "amount": 100,
            "category": "Lottery",
            "type": "Income",
            "date": "2022-01-20T00:00:00.000Z",
            "_id": "62e13ae4f9a38f7610e70be1"
        },
        {
            "amount": 200,
            "category": "Salary",
            "type": "Income",
            "date": "2022-01-20T00:00:00.000Z",
            "_id": "62e13ae4f9a38f7610e70be2"
        }
}


我想从具有特定 id 的事务数组中检索一个 object (我只想要那个 object )

我尝试了一些方法,例如

      const transactions = await Transactions.find({
        user: req.user._id,
        "transactions._id": {$eq: req.params._id },
      });

  const transactions = await Transactions.find({
        user: req.user._id,
        "transactions": { _id: req.params._id },
      });
            const transactions = await Transactions.find({
        user: req.user._id,
        "transactions": { $elemMatch:{_id: req.params._id }},
      });

但似乎没有任何效果,任何人都可以帮我解决这个问题并请提及我犯的错误。

尝试直接匹配transactions._id

"transactions._id": req.params._id

例子

const transactions = await Transactions.find({
  user: req.user._id,
  "transactions._id": req.params._id
});

更新

从评论中,可以使用投影作为.find()的第二个参数来仅返回它在transactions中找到的 object 。

const transactions = await Transactions.find({
  user: req.user._id,
  "transactions._id": req.params._id
}, { "transactions.$": 1 });

更多信息

如果你只想要那个匹配的元素,你必须使用聚合。

db.collection.aggregate([
{
  $unwind: "$transactions"
},
{
  $match: {
    "transactions.id": "idGoesHere"
  }
}
])

正如您在另一个答案中评论的那样,您也可以使用positional运算符来投影匹配的元素。

暂无
暂无

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

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