【问题标题】:Object.keys, how to get a list of keys in mongodbObject.keys,如何获取 mongodb 中的键列表
【发布时间】:2023-04-07 12:43:01
【问题描述】:
{
"_id": "1",
"style": "13123",
"category": "dress",
"colors": {
    "Black": {
        "prestock": 50,
        "instock": 60,
        "inactive": 0
        },
    "Blue": {
        "prestock": 30,
        "instock": 0,
        "inactive": 0
        },
    "Red": {
        "prestock": 10,
        "instock": 60,
        "inactive": 0
        }
  }
}

我有上面的 json,我需要访问 prestock、instock 和 inactive。 但是颜色的值会根据样式而变化。 例如:

{
 "_id": "2",
 "style": "14321", 
 "category": "top",
 "colors": {
     "Green": {
        "prestock": 50,
        "instock": 60,
        "inactive": 0
         }, 
     "Yellow": {
        "prestock": 50,
        "instock": 60,
        "inactive": 0
         }
      }
}

我如何在 mongodb 中查询这个? 这会和 Object.keys(obj) 有关吗?

ps.如果这是一个重复的问题,请指导我!

谢谢!

【问题讨论】:

  • 你想从中得到什么?
  • @user10 我需要访问 prestock、instock 和 inactive 的值
  • 访问这些值并不难一旦你的代码中有对象,你可以在那里使用javascript。如果你想查询它,你必须知道什么你想查询,即GreenYellowinstock值?或者你想要什么。像“库存> 0的任何颜色”?在这种情况下,您最好更改架构。
  • @mnemosyn 我需要这样的东西:{"colors.anycolor":{"prestock":{$gte:30}}}
  • @wisleans 你不能那样查询,这就是为什么你应该坚持使用他的回答中建议的像 mnemosyn 这样的数组。

标签: javascript node.js mongodb mongodb-query


【解决方案1】:

{"colors.*.prestock" : {$gte:30}} 这样的查询根据SERVER-267 是不可能的,我怀疑这将在未来几年得到支持。

最好的办法是将架构更改为数组:

colors: [
 { "color" : "Green", "instock" : 50, ... },
 { "color" : "Yellow", "instock" : 50, ... },
]

然后就可以查询了

db.foo.find( {"colors.prestock" : {$gte:30}} )

请注意,这将返回整个对象,包括所有颜色,即查询约束不成立的那些。这可以使用聚合框架来解决,但同样,仅使用 $unwind 也需要 colors 是一个数组。

【讨论】:

  • 这就是我现在所拥有的,但我想更改架构.. 无论如何谢谢!
【解决方案2】:

这就是你要找的吗? MongoDB Get names of all keys in collection

如果没有,那么应用程序必须有一个包含所有可能组合的键或枚举值列表,您必须查询并遍历它们。

【讨论】:

  • 我认为类似!但这对物体有用吗?您提供的链接在数组中
  • 应该的,试试看!
  • 请记住,Map/Reduce 主要用于大型操作并且具有相当大的开销,因此它对交互式查询没有用处。此外,您必须构造一个极其复杂的 $or 查询来“伪造”通配符行为。
  • @roko4326 哦等等..不,这不是我需要的。如何在不指定“黑色”的情况下访问预存货?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
  • 1970-01-01
  • 2022-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多