我的收藏是这样的
{
_id :"",
name:[
{
firstName:"",
lastName:"",
}
]
}
我需要在文档中找到匹配的名字。如何在查询中实现这一点?我是 mongodb 的新手。
@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)效果很好。
db.collection.find({name: {$elemMatch: {firstName: "Raj"}}});
有关更多详细信息,请查看文档$elemMatch
这就是解决您的问题的方法:
db.MyCollection.find( { name : { $elemMatch: { firstName : "valueGoesHere"} } } )