[英]How to search in array of object in mongodb
假设 mongodb 文档(表)'users' 是
{
_id: 1,
name: {
first: 'John',
last: 'Backus'
},
birth: new Date('Dec 03, 1924'),
death: new Date('Mar 17, 2007'),
contribs: ['Fortran', 'ALGOL', 'Backus-Naur Form', 'FP'],
awards: [
{
award: 'National Medal',
year: 1975,
by: 'NSF'
},
{
award: 'Turing Award',
year: 1977,
by: 'ACM'
}
]
}
// ...and other object(person)s
我想找到获得“国家奖章”奖并且必须在1975年颁发的人。可能有其他人在不同的年份获得过这个奖项。
我如何使用奖励类型和年份找到此人。 所以我可以得到确切的人。
正确的方法是:
db.users.find({awards: {$elemMatch: {award:'National Medal', year:1975}}})
$elemMatch
允许您匹配同一数组元素中的多个组件。
如果没有$elemMatch
mongo 将寻找在某个年份获得国家奖章和在 1975 年获得某些奖项的用户,但不会寻找在 1975 年获得国家奖章的用户。
有关更多信息,请参阅MongoDB $elemMatch 文档。 有关使用数组查询文档的更多信息,请参阅阅读操作文档。
使用$elemMatch
查找特定对象的数组
db.users.findOne({"_id": id},{awards: {$elemMatch: {award:'Turing Award', year:1977}}})
您可以通过两种方式执行此操作:
ElementMatch - $elemMatch
(如上述答案所述)
db.users.find({ awards: { $elemMatch: {award:'Turing Award', year:1977} } })
将$and
与find
db.getCollection('users').find({"$and":[{"awards.award":"Turing Award"},{"awards.year":1977}]})
如上述答案中所述另外,要从整个数组中仅返回一个字段,您可以使用projection
到查找中。 并使用$
db.getCollection("sizer").find(
{ awards: { $elemMatch: { award: "National Medal", year: 1975 } } },
{ "awards.$": 1, name: 1 }
);
会回来的
{
_id: 1,
name: {
first: 'John',
last: 'Backus'
},
awards: [
{
award: 'National Medal',
year: 1975,
by: 'NSF'
}
]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.