【问题标题】:Find in more than one collection MongoDB在多个集合中查找 MongoDB
【发布时间】:2016-06-07 00:40:31
【问题描述】:

我知道 MongoDB 是一个 NoSQL 数据库,并且没有连接,但是有没有一种方法可以在一个请求或一次查找中从两个或多个集合中获取数据。

我问这个,因为我不想做两个或更多的调用或请求来寻找东西,我想提高性能。

例如

我有:

var dogSchema = {
  dogName: String,
  owner: {type: mongoose.Schema.Types.ObjectId, ref: 'Owner'}
};

var catSchema = {
  catName: String,
  owner: {type: mongoose.Schema.Types.ObjectId, ref: 'Owner'}
};

我希望在一个 find() 中找到特定主人的所有宠物的名字

【问题讨论】:

  • 你能正确解释用例吗?这两个集合是什么?
  • @SiddharthAjmera 请检查添加的示例
  • 据我所知,您无法做到这一点。您必须同时拨打两个 find 电话。
  • 如果你真的想提高性能,那么你应该改变你的架构。我真的不认为需要两种不同的模式。您可以只为所有者提供一个模式,并将猫和狗作为嵌入的 JSON 对象嵌入到所有者文档内的 pets 数组中
  • MongoDB 不支持 JOINS 的原因是因为 MongoDB 是为高性能和可扩展性而设计的,而 JOINS 不可扩展。

标签: mongodb mongoose nosql


【解决方案1】:

通常你不能这样做。 MongoDB 的基本设计侧重于始终只影响一个集合的查询。

有一个例外。 $lookup 运算符可以与另一个集合执行有限的左外连接。但这不适用于这个问题的示例。

当您想一起搜索文档时,将它们放在同一个集合中。 MongoDB 是一个异构数据库,它允许不同类型的文档在同一个集合中。因此,将猫和狗存储在同一个集合中Pets 在技术上是可行的,而且很可能也具有实际意义(当然,这取决于它们在您的业务逻辑方面的相似程度)。

【讨论】:

  • 我得到的方法与我正在寻找的答案非常相似,谢谢。 PD:此解决方案仅适用于 mongodb 3.2 或更高版本
猜你喜欢
  • 2020-02-16
  • 2019-01-06
  • 1970-01-01
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
  • 2019-05-09
  • 2019-03-17
  • 1970-01-01
相关资源
最近更新 更多