use*_*628 2 python mongodb pymongo mongodb-query
我有一个collection包含的list,dicts我想搜索是否有dict包含两个特定的key:values。
因此,例如,我想find_one在字典中包含特定的姓氏和名字。这是我的收藏:
{
"names": [
{
"firstName": "bob",
"lastName": "jones",
"age": "34",
"gender": "m"
},
{
"firstName": "alice",
"lastName": "smith",
"age": "56",
"gender": "f"
},
{
"firstName": "bob",
"lastName": "smith",
"age": "19",
"gender": "m"
},
]
}
Run Code Online (Sandbox Code Playgroud)
我想查看是否有以鲍勃·史密斯为名字和姓氏的记录,我将其搜索为:
first = 'bob'
last = 'smith'
nameExists = db.user.find_one({'$and':[{'names.firstName':first,'names.lastName':last}]})
Run Code Online (Sandbox Code Playgroud)
此查询会检索鲍勃·史密斯的一条记录吗?
尽管提到确实$and不需要运算符,但无论哪种形式,这都不是您想要的查询。考虑以下:
db.user.find_one({ 'names.firstName': 'alice','names.lastName': 'jones' })
Run Code Online (Sandbox Code Playgroud)
实际上,这确实与给定的记录匹配,因为存在两个元素的“ firstName”等于“ alice”,而“ lastName”的值等于“ jones”。但是,当然,这里的问题很简单,因为数组中没有实际的元素具有两个值的子文档。
为了匹配数组元素包含“两个”给定条件的位置,您需要使用$elemMatch运算符。这会将查询条件应用于数组的“元素”。
db.user.find_one({
'names': { '$elemMatch': { 'firstName': 'alice','lastName': 'smith' }
})
Run Code Online (Sandbox Code Playgroud)
当然,如果您尝试使用“ alice”和“ jones”,则不会匹配,因为没有元素实际包含该操作。
| 归档时间: |
|
| 查看次数: |
3638 次 |
| 最近记录: |