【问题标题】:用于搜索的 Mongoose 复杂查询
【发布时间】:2022-01-23 09:38:35
【问题描述】:

这是我的文档,用户在其中注册并创建他们的商店,并且在每个商店中用户现在可以添加书籍匿名用户想要通过 id 或系统中可用的所有书籍获取书籍

[
  {
    _id: ObjectId("61c0a1a895a761d0fe1a1408"),
    storeName: 'Rose Book Store',
    ownerName: 'Rose Ahmed',
    books: [
      {
        name: 'economics',
        totalStock: 12,
        stockStatus: true,
        _id: ObjectId("61c20d9fcfef88e51e37bdaa")
      }
    ],
    createdAt: ISODate("2021-12-21T17:02:30.221Z"),
    __v: 0
  },
  {
    _id: ObjectId("61c17c1481adc44ea10c6083"),
    storeName: 'Toufik Book Store',
    ownerName: 'Toufik Ahmed',
    books: [
      {
        name: 'Database',
        totalStock: 14,
        stockStatus: true,
        _id: ObjectId("61c217b72e2dc3395071bb26")
      },
      {
        name: 'Database',
        totalStock: 14,
        stockStatus: true,
        _id: ObjectId("61c217e92e2dc3395071bb2b")
      },
      {
        name: 'MySql',
        totalStock: 0,
        stockStatus: false,
        _id: ObjectId("61c218142e2dc3395071bb31")
      }
    ],
    createdAt: ISODate("2021-12-21T18:03:13.296Z"),
    __v: 0
  }
]

我怎样才能得到所有的书,预期的输出

books:[{
name:"Some_book",
totalStock:12,
stockStatus: true,
_id: "Some_id"
},
{
name:"Some_other_book"
totalStock:0,
stockStatus:false
_id: "Some_id"
}]

当用户输入任何有效的图书 _id 时,我如何通过 id 获取图书 下面给出的预期输出

books:{
 name:"some_book",
 totalStock: 2,
 _id: "some object_id"}

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    这里分享的是普通聚合查询https://mongoplayground.net/p/SOO_Ffia5-q

    我们只是将所有书籍分组到一个文档中,以便您获得所有书籍。

    可以使用相同的聚合来根据 id 获取匹配的书。 https://mongoplayground.net/p/ILHMW-kPueD

    在聚合中我们使用了以下阶段:

    match:根据书的_id过滤书 展开:展开匹配的文档,因为匹配的文档可能在同一用户/商店中预订了其他不匹配的文档 匹配:过滤展开的书,所以我们只是得到匹配的书 项目:只返回书而不是所有字段

    使用此示例查询,您可以轻松创建您的 mongoose 等效代码,

    【讨论】:

    • 非常感谢@ProgrammerAnalyst
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多