MongoDB数组与对象

Rya*_*gle 6 javascript mongodb

假设我想维护每个用户的项目列表(在MongoDB中使用Node.js环境中的Mongoose ODM),然后查询项目是否归用户所有.例如,我想存储每个用户的所有喜欢的颜色,然后查看特定用户是否拥有特定颜色.在我看来,最好将颜色存储为用户文档中的嵌入对象,而不是用户文档中的数组.原因是检查对象中是否存在颜色似乎更有效,因为我可以检查对象属性是否存在:

if(user.colors.yellow){
  //true case
} else {
  //false case
}
Run Code Online (Sandbox Code Playgroud)

对比一个数组,我必须遍历整个数组,看看颜色是否存在于数组中的某个位置:

for (var i = 0; i < user.colors.length; i++) {
  if(user.colors[i] === "yellow"){
    //true case
  } else {
    //false case
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,从我在网上看过的很多例子来看,似乎使用数组这种类型的东西是相当普遍的.我错过了什么吗?有哪些优点/缺点,最好的方法是什么?

McG*_*gle 2

如果颜色存储为数组,则不必使用 for 循环。您可以只使用indexOf,如:

if(user.colors.indexOf("yellow") != -1){
   //true case
}
Run Code Online (Sandbox Code Playgroud)

也就是说,无论使用嵌入式文档还是数组,这都无关紧要。这并不像其中之一会带来巨大的性能优势。