当前位置:  开发笔记 > 编程语言 > 正文

mongoDB有多个查询?

如何解决《mongoDB有多个查询?》经验,为你挑选了1个好方法。

在mysql中我使用JOIN并且一个查询没问题.mongo怎么样?

想象类别和产品.

产品可能有更多类别.类别可能有更多的产品.(多对多结构)和管理员可以在管理中编辑类别(类别必须分开)

它可能在一个查询中编写带有类别名称的产品?

我用这个结构

categories {
   name:"categoryName",
         product_id:["4b5783300334000000000aa9","5783300334000000000aa943","6c6793300334001000000006"]
}


products  {
    name:"productName",
category_id:["4b5783300334000000000bb9","5783300334000000000bb943","6c6793300334001000000116"]
}

现在我可以简单地获取所有产品类别,以及某些类别和类别中的产品进行编辑.但如果我想要用类别名称编写产品,我需要两个查询 - 一个用于获取产品类别ID,第二个用于按类别从类别中获取类别名称.

这是正确的方法吗?或者这种结构不合适?我想只有一个查询,但我不知道它是否可能.



1> Gates VP..:

是的,MongoDB在这种特殊类型的操作中特别糟糕.但是,这也是一个范围问题.如果您有3000万个产品并且想要将300万个产品加入到他们的类别中,您会发现它在许多数据库中都不是很快(即使它是一行代码).

MongoDB在这里要求的是一些去规范化.

您的收藏可能如下所示:

categories {
  _id:"mongoid",
  name:"categoryName",
  ...
}

products  {
  _id:"mongoid",
  name:"productName",
  categories:[
    {"4b5783300334000000000bb9":'categoryName'},
    {"5783300334000000000bb943":'CategoryName2'},
    {"6c6793300334001000000116":'categoryName3'}
  ]
}

这是它的工作方式(粗略估计,没有我的Mongo实例方便):

抓住产品及其类别

db.products.find({"_id": {$in:[1,2,3]}, {name:1,categories:1})

获取特定类别的产品:

db.products.find({"categories.0": {$in:[x,y,z]}},{categories:1,name:1} }

是的,它不太一样.当您更改类别名称时,您必须更新所有产品记录.我知道这看起来很奇怪,但这是非规范化的标准.

顺便说一句,我在这里假设您将拥有大量产品并且明显减少类别.如果你在每个类别中说100个项目,这种方法可能是最好的.如果每个类别中有5个项目,那么您可能希望在每个项目中存储更多类别信息.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有