MongoDB:可以使用多键进行范围查询吗?

MongoDB:可以使用多键进行范围查询吗?,mongodb,indexing,Mongodb,Indexing,目标是通过范围查询对所有属性进行索引和搜索,并实际使用索引(与集合扫描相反)。不知道文档将具有哪些属性。我读过关于多键的书,但它们似乎只适用于(按索引)精确匹配查询 对于文档,“多键”首选此格式: var jd = { type: "Person", attributes: { name: "John Doe", age: 30 } }; var pd = { type: "Person", attributes: { name: "Penelope

目标是通过范围查询对所有属性进行索引和搜索,并实际使用索引(与集合扫描相反)。不知道文档将具有哪些属性。我读过关于多键的书,但它们似乎只适用于(按索引)精确匹配查询

对于文档,“多键”首选此格式:

var jd = {
  type: "Person",
  attributes: {
    name: "John Doe",
    age: 30
  }
};

var pd = {
  type: "Person",
  attributes: {
    name: "Penelope Doe",
    age: 26
  }
};

var ss = {
  type: "Book",
  attributes: {
    name: "The Sword Of Shannara",
    author: "Terry Brooks"
  }
};

db.things.save(jd);
db.things.save(pd);
db.things.save(ss);
db.things.ensureIndex({attributes: 1})
db.things.find({"attributes.age": 30}) // => John Doe
db.things.find({"attributes.age": 30}).explain() // => BasicCursor... (don't want a scan)
db.things.find({"attributes.age": {$gte: 18}) // John Doe, Penelope Doe (via a scan)
是否有一种模式,通过一个索引,我可以使用范围按属性查找项目

编辑:

在无模式数据库中,可能有无限的类型数组是有意义的,但集合名称实际上意味着某种类型。但如果我们走极端,我们希望允许集合中有任意数量的类型(这样我们就不必为用户可能想象的每一种可能的自定义类型定义集合)。因此,只使用一个深度索引(支持范围查询)按属性(任何种类)进行搜索,使这类事情更加可行。在我看来,这是一个无模式数据库的天然选择

如果你想投赞成票,就开罚单:


是范围查询使用多键。但是,多关键点用于阵列而不是嵌入对象

在上面的示例中,请尝试

var pd = {
  type: "Person",
  attributes: [
    {name: "Penelope Doe"},
    {age: 26}
  ]
};

是范围查询使用多键。但是,多关键点用于阵列而不是嵌入对象

在上面的示例中,请尝试

var pd = {
  type: "Person",
  attributes: [
    {name: "Penelope Doe"},
    {age: 26}
  ]
};

可以使用多键进行范围查询;但是,表达查询可能很棘手。

使用多键可以进行范围查询;但是,表达查询可能会很棘手。

我会将此问题发布到中,并从开发人员那里得到答案-他们非常响应。谢谢您的提示。我就是这么做的。:)我会把这个问题贴在博客上,并从开发者那里得到一个答案——他们的反应非常迅速。谢谢你的提示。我就是这么做的。:)目标是避免为“年龄”或任何一个属性编制索引,而是为所有“属性”编制索引。关键是我可以有任何属性键(例如“dob”、“name”、“hair_color”),我应该对它们都有索引访问权限。目标是避免索引“age”或任何一个属性,而是索引所有“attributes”。关键是我可以拥有任何属性键(例如“dob”、“name”、“hair_color”),我应该拥有对它们的索引访问权限。