【问题标题】:Mongodb search key /attrinute having spaceMongodb搜索键/属性有空格
【发布时间】:2016-05-25 20:24:06
【问题描述】:

我的 gameItem 集合中有数千个项目,以以下为例。

{
    "weapon name 1":{price:01},
    "weapon name 2":{price:100}
}

我在 shell 中运行这样的查询

db.gameItems.find({"weapon name 1":{$exists:1}})

什么都不会返回,但是当我的键没有空格时它可以工作......

第一个问题:有没有办法用空格搜索键值? 第二个问题:我应该把我的数据模型改成这样吗?:

   {
      weapon:{name: "weapon name 1", price:01}
      weapon:{name: "weapon name 2", price:100}
   }

然后在武器名称字段中添加索引?这是否提高了每个武器文档中只有 2 个字段的搜索性能?

谢谢

编辑:

抱歉,db collection gameItems 看起来实际上是这样的......

{
   last_updated:"2016-04-01",
   items:{
          "weapon name 1":{price:01},
          "weapon name 2":{price:100}
   }
}

那么我将如何在项目文档中搜索它们?

【问题讨论】:

  • 您建议重塑架构的方式几乎是正确的。价格似乎必须是数字,但 01 似乎不正确。如果您经常按武器名称搜索,添加索引会大大提高性能。
  • 这对我来说很好,你确定你查询的是正确的集合吗?在您的陈述中,您暗示您有一个 gameItem 集合,但您的查询针对的是 gameItems 集合?
  • 我犯了一个错误。我更新了 OP

标签: mongodb


【解决方案1】:

在键有空格的地方使用单引号。

在下面运行。

      db.gameItems.find({'weapon name 1':{$exists:1}})

【讨论】:

  • 我在我的 OP 中犯了一个错误。检查编辑是否更正
  • db.gameItems.find({items.'武器名称 1':{$exists:1}})
猜你喜欢
  • 2021-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多