1

考虑关注两个集合并关注注释。你觉得哪一个更合适?

// #1
{x:'a'}
{x:'b'}
{x:'c'}
{x:['d','e']}
{x:'f'}

.

//#2
{x:['a']}
{x:['b']}
{x:['c']}
{x:['d','e']}
{x:['f']}

一些事实:

  • 字段x通常只有一个值 (95%),有时甚至更多 (5%)。
  • Mongodb 在查询时的行为与 {x:['a']} 类似 {x:'a'}。
  • MongoVUE 直接在#1 中显示缩放器值并在Array[0]#2 中显示。
  • 使用#1,当你想追加一个新值时,你必须转换数据类型
  • #1 在某些 CRUD 操作中可能会快一点(?)
4

2 回答 2

1

为了放大@ZaidMasud 的观点,我建议使用 sclars 或数组,不要将两者混合使用。如果你有不可避免的理由同时拥有两者(比如遗留数据),那么我建议你非常熟悉 Mongo 查询如何处理数组;乍一看并不直观。例如看这个谜题

于 2013-02-10T01:59:17.507 回答
0

从模式设计的角度来看,即使 MongoDB 允许您为键值对存储不同的数据类型,这样做也不一定是一个好主意。如果没有令人信服的理由使用不同的数据类型,通常最好对给定的键/值对使用相同的数据类型。

因此,鉴于这种推理,我更喜欢#2。在这种情况下,应用程序代码通常会更简单。此外,如果您需要使用聚合框架,您会发现拥有统一类型很有用。

于 2013-02-09T16:57:33.530 回答