猫鼬:通过搜索查询获取对象

发布于 2025-02-01 12:35:15 字数 1623 浏览 2 评论 0原文

我正在尝试使用Mongoose从我的BSON文档中获取两种类型的数据。 两个数据是;

  1. 意图1-我想从项目数组中获取对象,其中tagno == 2
  2. 意图2 - 我想从tagno == 2和tagid == klawourvpz1iijoq2fhcvy7nm的项目数组中获取对象。

出于意图1,我尝试了;

 db.find(
  { "fileID": "0pdn3jdndndj3msms, "items.tagNo": 2 },
  {
    "items": {
      "$elemMatch": { "tagNo": 2 }
    }
  }
 );

我疲倦了下面的查询

db.find(
 { "fileID": "0pdn3jdndndj3msms, "items.tagNo": 2 },
 {
   "items": {
      "$elemMatch": { "tagNo": 2, "tagID": "kLawOURVpz1IIjoQ2fhCvy7NM", }
    }
  }
);

我的文档是;

{
  "_id": "ID_GOES_HERE",
  "fileID": "0pdn3jdndndj3msms",
  "fileName": "Item List",
  "items": [
    {
      "tagNo": 2,
      "status": 0,
      "tagID": "kLawOURVpz1IIjoQ2fhCvy7NM",
      "tagUnit": 5
    },
    {
      "tagNo": 2,
      "status": 0,
      "tagID": "kLawOURVpz1IIjoQ2fhCvy7NM",
      "tagUnit": 8
    },
    {
      "tagNo": 2,
      "status": 0,
      "tagID": "pOawOURVpz1IIjoQ2fhCvy7w3",
      "tagUnit": 81
    },
    {
      "tagNo": 4,
      "status": 0,
      "tagID": "kLawOURVpz1IIjoQ2fhCvy7NM",
      "tagUnit": 904
    },
    {
      "tagNo": 3,
      "status": 0,
      "tagID": "pOawOURVpz1IIjoQ2fhCvy7w3",
      "tagUnit": 24
    },
    {
      "tagNo": 2,
      "status": 0,
      "tagID": "pOawOURVpz1IIjoQ2fhCvy7w3",
      "tagUnit": 35
    },
    {
      "tagNo": 1,
      "status": 0,
      "tagID": "kLawOURVpz1IIjoQ2fhCvy7NM",
      "tagUnit": 11
    },
    {
      "tagNo": 2,
      "status": 0,
      "tagID": "kLawOURVpz1IIjoQ2fhCvy7NM",
      "tagUnit": 30
    }
  ]
}

I am trying to pull out data of 2 types from my BSON document using mongoose.
The 2 data are;

  1. Intention 1 - I want to get objects from the items array where tagNo == 2
  2. Intention 2 -I want to get objects from the items array where tagNo == 2 and tagID == kLawOURVpz1IIjoQ2fhCvy7NM.

For intention 1, I tried;

 db.find(
  { "fileID": "0pdn3jdndndj3msms, "items.tagNo": 2 },
  {
    "items": {
      "$elemMatch": { "tagNo": 2 }
    }
  }
 );

and I tired the query below for intention 2

db.find(
 { "fileID": "0pdn3jdndndj3msms, "items.tagNo": 2 },
 {
   "items": {
      "$elemMatch": { "tagNo": 2, "tagID": "kLawOURVpz1IIjoQ2fhCvy7NM", }
    }
  }
);

I keep getting the entire object back.

My BSON document is;

{
  "_id": "ID_GOES_HERE",
  "fileID": "0pdn3jdndndj3msms",
  "fileName": "Item List",
  "items": [
    {
      "tagNo": 2,
      "status": 0,
      "tagID": "kLawOURVpz1IIjoQ2fhCvy7NM",
      "tagUnit": 5
    },
    {
      "tagNo": 2,
      "status": 0,
      "tagID": "kLawOURVpz1IIjoQ2fhCvy7NM",
      "tagUnit": 8
    },
    {
      "tagNo": 2,
      "status": 0,
      "tagID": "pOawOURVpz1IIjoQ2fhCvy7w3",
      "tagUnit": 81
    },
    {
      "tagNo": 4,
      "status": 0,
      "tagID": "kLawOURVpz1IIjoQ2fhCvy7NM",
      "tagUnit": 904
    },
    {
      "tagNo": 3,
      "status": 0,
      "tagID": "pOawOURVpz1IIjoQ2fhCvy7w3",
      "tagUnit": 24
    },
    {
      "tagNo": 2,
      "status": 0,
      "tagID": "pOawOURVpz1IIjoQ2fhCvy7w3",
      "tagUnit": 35
    },
    {
      "tagNo": 1,
      "status": 0,
      "tagID": "kLawOURVpz1IIjoQ2fhCvy7NM",
      "tagUnit": 11
    },
    {
      "tagNo": 2,
      "status": 0,
      "tagID": "kLawOURVpz1IIjoQ2fhCvy7NM",
      "tagUnit": 30
    }
  ]
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

闻呓 2025-02-08 12:35:15

您需要聚合框架

  db.collection.aggregate([
  {
    $match: { //Match condition to get the matching arrays
      "fileID": "0pdn3jdndndj3msms",
      "items.tagNo": 2
    }
  },
  {
    $project: {
      "items": {
        $filter: { //Project only matching array elements
          input: "$items",
          as: "item",
          cond: {
            $eq: [
              "$item.tagNo",
              2
            ]
          }
        }
      }
    }
  }
])

playground

db.collection.aggregate([
  {
    $match: {
      "items": {
        "$elemMatch": {
          "tagNo": 2,
          "tagID": "kLawOURVpz1IIjoQ2fhCvy7NM",
          
        }
      }
    }
  },
  {
    $project: {
      "items": {
        $filter: {
          input: "$items",
          as: "item",
          cond: {
            "$and": [
              {
                $eq: [
                  "$item.tagNo",
                  2
                ]
              },
              {
                $eq: [
                  "$item.tagID",
                  "kLawOURVpz1IIjoQ2fhCvy7NM"
                ]
              }
            ]
          }
        }
      }
    }
  }
])

游乐场

You need aggregation framework

  db.collection.aggregate([
  {
    $match: { //Match condition to get the matching arrays
      "fileID": "0pdn3jdndndj3msms",
      "items.tagNo": 2
    }
  },
  {
    $project: {
      "items": {
        $filter: { //Project only matching array elements
          input: "$items",
          as: "item",
          cond: {
            $eq: [
              "$item.tagNo",
              2
            ]
          }
        }
      }
    }
  }
])

Playground

db.collection.aggregate([
  {
    $match: {
      "items": {
        "$elemMatch": {
          "tagNo": 2,
          "tagID": "kLawOURVpz1IIjoQ2fhCvy7NM",
          
        }
      }
    }
  },
  {
    $project: {
      "items": {
        $filter: {
          input: "$items",
          as: "item",
          cond: {
            "$and": [
              {
                $eq: [
                  "$item.tagNo",
                  2
                ]
              },
              {
                $eq: [
                  "$item.tagID",
                  "kLawOURVpz1IIjoQ2fhCvy7NM"
                ]
              }
            ]
          }
        }
      }
    }
  }
])

Playground

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文