【问题标题】:MongoDB:Querying across a list of items in array fieldMongoDB:查询数组字段中的项目列表
【发布时间】:2020-01-10 11:20:16
【问题描述】:

我正在尝试实现一个公交路线列表应用程序。我的目标是列出通过两个用户给定点(位置)的巴士。

我在后端使用 mongodb。数据的简单结构如下:

....
{ name: 'Bus-N', route: ["Loc1", "Loc2", "Loc3", "Loc4", "Loc5" ], startTime:'..'},
{ name: 'Bus-M', route: ["Loc2", "Loc3", "Loc4"], startTime:'..'}
....

假设:我有所有公共汽车的列表,我有每辆公共汽车的所有旅行路线。

用户提供他的start location 和他的destination 作为输入。

  1. 如何使用这些输入(起始位置和目的地)在此数据库中查询以列出经过这两个点的所有公共汽车? 例如:如果输入是(Loc3, Loc4),我需要输出为(Bus-N, Bus-M)
  2. 如果有更好的方法来实现(显然应该有),请推荐所需的更改。

我是mongodb 的新手。请帮助解决这个问题,在此先感谢。

【问题讨论】:

  • $all 是您正在寻找的内容:link。也测试过了。。它的工作原理。 db.collection.find({ route: { $all: ["Loc3", "Loc4"] } }).

标签: node.js mongodb mongoose mongodb-query


【解决方案1】:

您需要使用数组查询运算符,例如:

  1. $elemMatch
  2. $and

在您的.find.findOne 查询期间。你可以找到更多关于它的信息in the official MongoDB documentation,(猫鼬的语法是一样的)

您还可以在 this question 中找到对您的案例有用的信息,其中解释了数组字段的 $all$in 运算符之间的区别。

您的查询应如下所示:

Model.find({ route: { $in: ["start_point", "dest_point"] } }).exec(callback)

【讨论】:

  • 这个问题有更好的解决方案吗?如果我有几千个条目,这种方法是否行得通?
  • @Joseph,唯一的目的是在必要的字段上使用index 来提高大规模集合的性能。我只是在 SW 上回答另一个关于它的问题,所以你可以在这里查看:stackoverflow.com/questions/57841749/… 和该问题中的其他链接。我想你会发现它对你的情况很有帮助,尤其是如果你需要通过aggregation 构建庞大而复杂的查询。但唯一的问题是我不知道索引在数组类型字段上增加了多少 mongo 性能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-09
  • 2020-08-31
  • 2012-08-23
  • 1970-01-01
  • 1970-01-01
  • 2020-09-14
相关资源
最近更新 更多