简化示例和问题
为了尽可能简单,我将直接举一个例子:
foo
具有多键索引的集合{searchTags: 1}
:
{_id: 1, searchTags: [{bar: "BAR"}]}
{_id: 2, searchTags: [{baz: "BAZ"}]}
我正在尝试使用baz
字段键获取所有嵌入式文档(不使用$exists
- 我可以稍后尝试解释原因)。为什么
{searchTags: {$elemMatch: { $gte: { baz: MinKey() }, $lte: { baz: MaxKey() }}}}
返回两个文件(不是首选),但是
{searchTags: {$elemMatch: { $gte: { baz: "" }, $lte: { baz: MaxKey() }}}}
只返回{_id: 2, searchTags: [{baz: "BAZ"}]}
(首选)?
旁注:快速架构细节可能会避免“你在做什么?” 问题
- 这些是简单的嵌入文档,只有 1 个键值对。
- 这些值可以是多种类型,而不仅仅是字符串(否则,我将只使用前缀字符串数组而不是嵌入文档)
- 由于嵌入式文档是单一的键值对,我可以确定性地在嵌入式文档上使用相等和比较查询。
- 键是
foo
文档上的其他字段名称,值是它们的字段值。我可以索引各个字段,但它们将是部分索引并且会有很多。为了灵活性,将它们全部合并到具有多键索引的数组中是最有意义的。 - 仍然愿意听到我为什么错了:)