如何 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" })
如果您通过查询球员文件而不是尝试匹配球队文件来搜索球员,您的生活将会轻松得多。
我有以下集合结构:
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" })
如果您通过查询球员文件而不是尝试匹配球队文件来搜索球员,您的生活将会轻松得多。