如何 return 使用 find() 进行深度搜索的查询结果 MongoDB?

How to return the results of a query using find() for a deep search level with MongoDB?

我有以下集合结构:

teams: [{
  name: String,
  address: String,
  players: [{
    name: String,
    age: Integer
  }]
}]

我正在尝试通过播放器的 'name' 进行搜索。我正在尝试这个:

db.teams.find({ players: { $elemMatch: { name: /john/ } } }, { 'players.$':1 })

这returns一些结果,但不是全部。还有这个:

db.teams.find({ players: { $elemMatch: { name: /john/ } } })

这最后returns条集合的所有记录。

我需要通过一个播放器以其名称作为参数进行查找。

什么是正确的查询?

这是对 MongoDB 的常见误解。 MongoDB 中的查询不匹配子文档;他们没有 return 子文档。查询匹配集合中的 return 个文档,returned 字段可通过投影调整。使用您的文档结构,您无法编写匹配 returns 数组中子文档之一的查询。您可以(并且已经在您的示例中)编写查询以匹配包含与条件匹配的数组元素的文档,然后仅投影数组中的 first 匹配元素。了解其中的区别很重要。如果您想匹配 return 个播放器文档,您的集合应包含播放器文档:

{
    "name" : "John Smalls",
    "age" : 29,
    "team_name" : "The Flying Sharks",
    "team_address" : "123 Fake Street"
}

球员文件提到了他们的球队。要按姓名查找玩家,

db.players.find({ "name" : /^John"/ })

要找到团队中的所有球员,

db.players.find({ "team_name" : "The Flying Sharks" })

如果您通过查询球员文件而不是尝试匹配球队文件来搜索球员,您的生活将会轻松得多。