AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-5065577

Bogdan Dubyk's questions

Martin Hope
Bogdan Dubyk
Asked: 2024-01-04 00:39:23 +0800 CST

typesense 小面产品按类别

  • 5

我对类型感有点陌生,但我想做的是获取所有类别以及每个类别的产品数量,我认为这可以通过使用facet来完成,对吧?

假设我的产品文档架构如下:

{
   "name" : "products",
   "fields" : [
       {
           "name" : "id",
           "type" : "string"
       },
       {
           "name": "name",
           "type": "string"
       }, 
       {
           "name": "categories",
           "type": "object[]",
           "facet": true,
           "fields" : [
               {
                   "name":"id",
                   "type": "string"
               },
               {
                   "name":"label",
                   "type": "string"
               }
           ]
       },
       {
           "name": "options",
           "type": "string[]",
           "facet": true
       }
      
   ] 
}

所以这里每个产品可以属于一个或多个类别(如果产品所属的类别是子类别,则意味着该产品也属于父类别)并且categories字段设置为facet我想要获取每个类别中的产品数量的所有类别。

当我运行这样的搜索查询时:

client.collections('products').documents().search(
   {
      "q" : "*",
      "facet_by" : "categories.id",
      "per_page" : 0 # I do not need products just the facet part
   }
)

typesense 返回随机 9 个方面字段,如下所示:

"facet_counts" => array:1 [
    0 => array:4 [
      "counts" => array:10 [
        0 => array:3 [
          "count" => 106581
          "highlighted" => "ab58454c-def8-431f-ad78-b435e390d095"
          "value" => "ab58454c-def8-431f-ad78-b435e390d095"
        ]
        1 => array:3 [
          "count" => 106580
          "highlighted" => "1b4dfa36-c66d-4cc0-a61d-3fee6b878299"
          "value" => "1b4dfa36-c66d-4cc0-a61d-3fee6b878299"
        ]
        2 => array:3 [
          "count" => 106550
          "highlighted" => "fe1633c0-7cd6-4f7c-88ed-f6b9de34d94d"
          "value" => "fe1633c0-7cd6-4f7c-88ed-f6b9de34d94d"
        ]
        3 => array:3 [
          "count" => 106547
          "highlighted" => "9e794fee-b3fd-4f83-a41c-cbf629bec8cf"
          "value" => "9e794fee-b3fd-4f83-a41c-cbf629bec8cf"
        ]
        4 => array:3 [
          "count" => 106543
          "highlighted" => "b94f2647-f850-48b3-861e-d9fd97cfe577"
          "value" => "b94f2647-f850-48b3-861e-d9fd97cfe577"
        ]
        5 => array:3 [
          "count" => 106542
          "highlighted" => "96e281f4-3f63-411a-a517-0250e2491cf5"
          "value" => "96e281f4-3f63-411a-a517-0250e2491cf5"
        ]
        6 => array:3 [
          "count" => 106530
          "highlighted" => "455a8b50-2dc5-4683-837e-8119217b9ee1"
          "value" => "455a8b50-2dc5-4683-837e-8119217b9ee1"
        ]
        7 => array:3 [
          "count" => 106523
          "highlighted" => "7215ec95-db47-4c90-b915-349fa05191d1"
          "value" => "7215ec95-db47-4c90-b915-349fa05191d1"
        ]
        8 => array:3 [
          "count" => 106507
          "highlighted" => "59171caf-cc00-4b7b-92dd-0da54b925a95"
          "value" => "59171caf-cc00-4b7b-92dd-0da54b925a95"
        ]
        9 => array:3 [
          "count" => 106506
          "highlighted" => "4128454d-2c26-4ed4-b194-021426a5f99e"
          "value" => "4128454d-2c26-4ed4-b194-021426a5f99e"
        ]
      ]
      "field_name" => "categories.id"
      "sampled" => false
      "stats" => array:1 [
        "total_values" => 1696
      ]
    ]
  ]

但在集合中有更多类别,我做错了什么?我怎样才能获得所有类别的产品数量,或者不可能获得方面?

UPD:我还有一个选项是与产品相关的过滤器 ID 列表,我想要一个单独的查询来执行相同的操作(获取具有产品数量的所有过滤器),这可能是另一个故事,只是解释为什么它在那里。

typesense
  • 1 个回答
  • 16 Views
Martin Hope
Bogdan Dubyk
Asked: 2023-12-22 00:57:15 +0800 CST

如何在mongo中制作完全覆盖索引

  • 6

假设我有一个具有以下结构的文档:

_id: ObjectId,
user_id: int,
deleted: bool,
'additional.id': string, // optional field
synced_at: Date //optional field

示例文档将是:

{
    "_id" : ObjectId("5dce551d6ad5bb1fd829bd77"),
    "user_id" : NumberInt(1),
    "additional" : {
        "id" : "hahahah"
    },
    "deleted" : false,
    "synced_at" : ISODate("2023-12-19T19:21:26.678+0000")
}

我需要获取与此查询匹配的所有文档的计数:

aggregate(
[
    {
        $match: {
             user_id: 1, 
             deleted: false,
  
             "additional.id" : {$exists : true},
             synced_at : {
                 $gte: new Date(new Date() - 7 * 60 * 60 * 24 * 1000)
             },
        }
    }
    ,
    {
        $count : "productsCount"
    }
]
)

所以我创建了一个这样的索引:

createIndex(
  {
      "user_id": 1,
      "deleted": 1,
      "additional.id": 1,
      "synced_at": -1,
  },
  {
      partialFilterExpression: {
        "deleted" : false,
        "additional.id" : {
            "$exists" : true
        },
        "synced_at" : {
            "$exists" : true
        }
    }
)

假设查询结果是 20000。当我运行查询时,.explain("executionStats")我可以看到totalKeysExamined和totalDocsExamined都等于 20000,如果我没记错的话,这意味着从索引中取出了 20k 个产品,另外 mongo 还进行了查找所有这 20k 产品。更深入地检查执行统计数据,我可以看到Fetch索引顶部的阶段:

"executionStages" : {
    "stage" : "FETCH",
    "filter" : {
        "$and" : [
           {
               "additiona.id" : {
                   "$exists" : true
                }
            ,
        ]
    },

所以,如果我没记错的话,这意味着 Mongo 从索引中获取所有需要的文档(20k),但出于某种原因,还会检查 20k 个产品中的每一个,即使 "additiona.id" : {"$exists" : true}它已经在partialFilterExpression

我可以以某种方式避免这个获取阶段吗?我在 Mongo 5 上。

mongodb
  • 1 个回答
  • 25 Views
Martin Hope
Bogdan Dubyk
Asked: 2023-08-24 23:09:39 +0800 CST

Mongo查询获取字段不存在、null、空对象{}或空数组[]的文档

  • 5

假设我有 7 个这样的文档:

// with content.id
{
   "_id" : 1, // I know it will be ObjectId but for simplicity here I'll set it as int
   "content" : {"id" : 1, "title" : "some title"}
}
// without content.id
{
   "_id" : 2,
   "content" : {"title" : "some title"}
}
// with content.id equal to null
{
   "_id" : 3,
   "content" : {"id" : null, "title" : "some title"}
}
// with empty content object
{
   "_id" : 4,
   "content" : {}
}
// with content as an empty array
{
   "_id" : 5,
   "content" : []
}
// with content equal to null
{
   "_id" : 6,
   "content" : null
}
// without content
{
   "_id" : 7,
}

我需要获取所有记录,而在我们的案例中,我们没有除content.id记录 1 之外的所有记录。

我尝试过

collection.find({"content.id" : null});  

它不返回正确的记录 1,但也不返回 id 为 5 的记录,其中content设置为空数组

另外,我尝试过

collection.find({"content.id" : {"$exists" : false}});  

在这种情况下,它返回 id 为 5 的记录,但不返回 id 为 3 的记录,该记录content.id存在但设置为 null。

我发现查询可以与两者的组合一起使用,如下所示

collection.find({ "$or" : [{"content.id" : {"$exists" : false}} , {"content.id" : null}]});  

但这样的查询运行速度有点慢:(

有没有更好的方法来涵盖上述所有情况?

您可能会问为什么我要同时涵盖content: {}和content: []?因为 PHP 有时会将空数组转换为对象,但有时会转换为空数组,以免出现任何问题,我想涵盖这两种情况。

mongodb
  • 1 个回答
  • 13 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve