Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于MongoDB的深度搜索级别,如何使用find()返回查询结果?_Mongodb - Fatal编程技术网

对于MongoDB的深度搜索级别,如何使用find()返回查询结果?

对于MongoDB的深度搜索级别,如何使用find()返回查询结果?,mongodb,Mongodb,我的收藏结构如下: teams: [{ name: String, address: String, players: [{ name: String, age: Integer }] }] 我正在尝试按玩家的“姓名”搜索。我正在尝试: db.teams.find({ players: { $elemMatch: { name: /john/ } } }, { 'players.$':1 }) 这将返回一些结果,但不是全部。这是: db.teams.find(

我的收藏结构如下:

teams: [{
  name: String,
  address: String,
  players: [{
    name: String,
    age: Integer
  }]
}]
我正在尝试按玩家的“姓名”搜索。我正在尝试:

db.teams.find({ players: { $elemMatch: { name: /john/ } } }, { 'players.$':1 })
这将返回一些结果,但不是全部。这是:

db.teams.find({ players: { $elemMatch: { name: /john/ } } })
最后一个返回集合的所有记录

我需要找到一个玩家的名字作为参数


什么是正确的查询?

这是关于MongoDB的常见误解。MongoDB中的查询与子文档不匹配;它们不返回子文档。查询匹配并返回集合中的文档,返回的字段可通过投影进行调整。对于文档结构,您无法编写匹配并返回数组中某个子文档的查询。您可以(并且在您的示例中)编写一个查询来匹配包含与条件匹配的数组元素的文档,然后只投影数组中的第一个匹配元素。理解其中的差异很重要。如果要匹配并返回玩家文档,则您的集合应包含玩家文档:

{
    "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" })

如果您通过查询玩家文档而不是尝试匹配团队文档来搜索玩家,您的生活将变得更加轻松。

第一次查询将返回所有文档,其中包含名为
/john/
项目的玩家,在每个文档的玩家数组中仅返回该玩家。第二个查询选择所有具有名为
/john/
的播放机且没有任何投影的文档,而不是集合中的所有文档。这两个查询都可以正常工作。你的目标输出是什么?我的目标是只得到那些有这种条件的球员。只有使用/john/name.Thx的玩家才能回答您的问题。我认为最好的办法是像你说的那样再收集一次。