有没有人有使用 name:boolean 与 numeric permutation-type 表示的对的工作经验,并且最好这样显示。以下是单个记录/行的一部分。
{ ... {status { working: true, married: false }} ...}
对比
{ ... {status: 3} ... }
在后者中我们需要一个排列 (未工作+未婚=1;工作+未婚=2;未工作+已婚=3;工作+已婚=4)
然后每个都需要他们各自的查询:
{status.married: true}
对比
{status: {$in : [3,4]}}
进一步的考虑是,大多数查询将不是单个短语,而是并集/交集,例如 {status.married: true}、{status.working: true}
或 {$或者:[{status.married: true}, {status.working: true}]}
后一种形式更简单{status: {$in : [2,3,4]}}
考虑因素包括单个索引与两个索引。
我不确定什么更“可读”重构排列样式似乎更容易。但客户需要知道正确的顺序。
最佳答案
bool 方法的优点:
- 查询是明确的/可读的
- 文档可读/不言自明
- 支持更灵活的查询(所有使用数字排列类型的查询必须使用等式/不等式或“$in”)
- 我实际上认为这更容易重构,因为它不是基于数据表示的隐式规则(例如字段的顺序)
数字排列类型的优点:
- 查询更短(并且可以说更简单?)(但不是不言自明的)
- 只有一个字段可以创建索引
- 文件较小
我认为两者之间并没有固有的速度优势。这取决于您运行的数据和实际查询。
考虑您真正关心的是上述哪一项,并据此做出决定。
我倾向于使用显式(“-比隐式更好”)。
关于algorithm - mongo $in 反对成对的嵌套文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24025681/