首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用nodejs和mongoose从具有mongodb id的对象数组中获取元素

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

Stack Overflow用户
提问于 2022-07-27 14:04:09
回答 2查看 263关注 0票数 1

我有很多这样的文件

代码语言:javascript
复制
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从事务数组中检索一个对象(我只想要那个对象)

我尝试了一些方法,比如

代码语言:javascript
复制
      const transactions = await Transactions.find({
        user: req.user._id,
        "transactions._id": {$eq: req.params._id },
      });
代码语言:javascript
复制
  const transactions = await Transactions.find({
        user: req.user._id,
        "transactions": { _id: req.params._id },
      });
代码语言:javascript
复制
            const transactions = await Transactions.find({
        user: req.user._id,
        "transactions": { $elemMatch:{_id: req.params._id }},
      });

但是似乎没有什么是可行的,有人能帮我解决这个问题吗?请提一下我犯的错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-27 14:11:46

尝试直接匹配transactions._id

代码语言:javascript
复制
"transactions._id": req.params._id

示例

代码语言:javascript
复制
const transactions = await Transactions.find({
  user: req.user._id,
  "transactions._id": req.params._id
});

更新

从注释中可以使用投影作为.find()的第二个参数,只返回它在transactions中找到的对象。

代码语言:javascript
复制
const transactions = await Transactions.find({
  user: req.user._id,
  "transactions._id": req.params._id
}, { "transactions.$": 1 });

更多信息

票数 2
EN

Stack Overflow用户

发布于 2022-07-27 14:11:20

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

代码语言:javascript
复制
db.collection.aggregate([
{
  $unwind: "$transactions"
},
{
  $match: {
    "transactions.id": "idGoesHere"
  }
}
])

正如您在另一个答案中注释的那样,您也可以使用positional操作符来投影匹配的元素。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73139415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档