2

我的收藏是这样的

{
 _id :"",
 name:[
  {
   firstName:"",
   lastName:"",
  }
 ]
}

我需要在文档中找到匹配的名字。如何在查询中实现这一点?我是 mongodb 的新手。

4

3 回答 3

2

@Sushant Gupta 提供了正确的答案,但是我会说你也可以这样做来增加一点味道:

db.collection.find({'name.firstName': 'Raj'}, {'name.$':1})

至:matching firstName in the documents

这背后的关键是 MongoDB 会将文档中的单个多键出现视为普通的平面字段,允许您像这样向下查询它们。

您看到的第二个参数实际上是一个投影(http://docs.mongodb.org/manual/reference/projection/elemMatch/),它告诉 MongoDB 基本上投影出 FIRST(如果您需要更多,则需要使用聚合框架) 匹配name来自主文档的子文档。

值得注意的是,如果您添加两个或多个多键字段,如下所示:

db.collection.find({'name.firstName': 'Raj', 'name.lastName': ''}, {'name.$':1})

然后,您将需要使用$elemMatch,但是,对于像这样的小型单字段查询,或者您有意在文档中的所有多键字段中搜索两个值,点表示法(http://docs.mongodb.org/manual/reference /glossary/#term-dot-notation)效果很好。

于 2013-04-18T11:30:49.937 回答
2
db.collection.find({name: {$elemMatch: {firstName: "Raj"}}});

有关更多详细信息,请查看文档$elemMatch

于 2013-04-18T10:50:28.733 回答
0

这就是解决您的问题的方法:

db.MyCollection.find(  { name : { $elemMatch: { firstName : "valueGoesHere"} } } )
于 2013-04-18T11:12:33.880 回答