【问题标题】:MongoDB Collections formatMongoDB 集合格式
【发布时间】:2012-10-21 21:58:54
【问题描述】:

我需要用相应的菜单项来存储餐厅,所以我做了这样的事情

{ name: 'Foo',
  menu: 
 [ { item: 'foo',
   description: '...',
   price: 20 },
 { item: 'bar',
   description: '...',
   price: 30 } ]
}

问题是我有时需要访问这些项目,但这样做并不容易,我应该改用这样的东西吗?

{ name: 'Foo',
menu: 
{ "0": { item: 'foo',
   description: '...',
   price: 20 },
 "1": { item: 'bar',
   description: '...',
   price: 30 } }
}

我认为找到特定项目更便宜。

【问题讨论】:

    标签: json node.js mongodb


    【解决方案1】:

    使用可通过编号键访问的嵌入式对象很少是正确的方法。 MongoDB 有操作符来方便访问数组中的项目,从而提供更好的灵活性。

    请参阅 $elemMatch 和 $ 投影运算符,了解如何仅提取所需的数组元素。

    例如,要从您的第一个示例文档中获取 'foo' 菜单项:

    db.restaurants.findOne({name: 'Foo'}, {menu: {$elemMatch: {item: 'foo'}}});
    

    【讨论】:

    • 不知道为什么我得到“未捕获的异常:错误{“$err”:“不支持的投影选项:$elemMatch”,“代码”:13097 }”
    • @jtomasrl 你运行的是什么版本的MongoDB? $elemMatch 是在 2.2 中添加的。
    猜你喜欢
    • 2020-05-02
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多