gpt4 book ai didi

node.js - 使用 $gt 和 $ne 的 MongoDB 查询索引

转载 作者:太空宇宙 更新时间:2023-11-04 00:44:56 24 4
gpt4 key购买 nike

查询

我有一个这样的查询:

db.sample.find({
bool1: false,
theNull: null,
existing: {$ne: null},
$or: [
{ bool2: false, string: {$in: [<array of strings>]}},
{ bool2: true, string: {$in: [<array of different strings>]}}
],
dateField: {$lt: ISODate(<Given date>)}
}).sort({dateField: -1});

问题

我正在寻找为此构建一个最佳索引查询。我经常遇到这个问题,我想做得更好。

部分查询

我的文档在大多数情况下 (99.9+ %) 将 bool1 设置为 falsetheNull 为 null,而 existing 在 95% 的情况下不为 null - 因此我需要这些字段(在某处)将其过滤掉。

dateField 是我排序的依据。现在,我有趣的数据集是 stringbool2 - 我对文档有一些变化,这基本上就是查询过滤的内容。

string 始终来自一组相对包含的字符串(实际上是用户名),并且 bool2 在极少数文档中为 true。

dateField 基本上与实际插入时间一起是连续的,但到处都有间隙,例如我必须将一系列 10-100 个文档的日期向后移动几个月。

到目前为止我做了什么

到目前为止最好的结果是设置这些索引:

{ string: 1, bool2: 1, creation_time: 1}

结合(或)与

{string: 1, bool2: 1}

我不确定针对此特定查询使用什么最佳索​​引策略。

我尝试过在查询中上下移动很多内容(例如,将现有一直向下移动或仅移动到 $or 下方)。

此外,我尝试向各种组合中的所有这些字段添加索引。运行解释时,我最常遇到的结果是使用在 stringbool2 上设置的索引,或与另一个索引或 stringbool2dateField 进行 OR 运算。

我可以将 booltheNullexisting 或这些的各种组合放在该索引前面,但它们不会被使用。

我想知道为什么会这样,如果我可以对这些文档建立更广泛的索引,我是否会获得更好的性能(或者更少获取的文档,如果这很重要)。

最佳答案

这将是我尝试的第一个索引:

{ string: 1, creation_time: -1}

由于您的大部分变体都在字符串中,因此它是最好的过滤列。我还按降序添加了 creation_time,因为当查询顺序和索引顺序匹配时性能会更好。

您还可以通过包含 bool2 获得更好的结果:

{ string: 1, bool2: 1, creation_time: -1}

关于node.js - 使用 $gt 和 $ne 的 MongoDB 查询索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35120767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com