Python 仅在MongoDB中返回匹配的属性
我有以下数据结构。数据库包含多个实例,所有实例都具有相同的基本数据结构Python 仅在MongoDB中返回匹配的属性,python,mongodb,pymongo,Python,Mongodb,Pymongo,我有以下数据结构。数据库包含多个实例,所有实例都具有相同的基本数据结构 { _id: ObjectId('5f4ceabe521de56d99738fd4'), position: 11, entropy: 0.4582005345072268, supports: 61, sequences: [ { position: 11, sequence: 'CLVFAQKIP', count: 56, conservation:
{
_id: ObjectId('5f4ceabe521de56d99738fd4'),
position: 11,
entropy: 0.4582005345072268,
supports: 61,
sequences: [
{
position: 11,
sequence: 'CLVFAQKIP',
count: 56,
conservation: 91.80327868852459,
motif_short: 'I',
motif_long: 'Index',
id: [
'ASU55526.1',
'ASU55528.1',
'QBM69729.1',
'QJR40421.1'
],
strain: [
'Influenza A virus A/Shandong-Zhifu/164/2016',
'Influenza A virus A/Shandong-Zhifu/1185/2016',
'Influenza A virus A/China/71517/2016',
'Influenza A virus A/Jiangxi/2017lgfh0026/2016'
],
country: [
'HA Hemagglutinin',
'HA Hemagglutinin',
'HA Hemagglutinin',
'HA Hemagglutinin'
],
host: [
'Influenza A virus A/Shandong-Zhifu/164/2016',
'Influenza A virus A/Shandong-Zhifu/1185/2016',
'Influenza A virus A/China/71517/2016',
'Influenza A virus A/Jiangxi/2017lgfh0026/2016'
]
},
{
position: 11,
sequence: 'CLVFAQKLP',
count: 4,
conservation: 6.557377049180328,
motif_short: 'Ma',
motif_long: 'Major',
id: [
'APQ31289.1',
'APQ31290.1',
'QJR40413.1',
'QJR40414.1'
],
strain: [
'Influenza A virus A/Xiamen/s200/2016',
'Influenza A virus A/Xiamen/s175/2016',
'Influenza A virus A/Jiangxi/2016lgfh1021/2016',
'Influenza A virus A/Jiangxi/2017lgfh0045/2016'
],
country: [
'HA Hemagglutinin',
'HA Hemagglutinin',
'HA Hemagglutinin',
'HA Hemagglutinin'
],
host: [
'Influenza A virus A/Xiamen/s200/2016',
'Influenza A virus A/Xiamen/s175/2016',
'Influenza A virus A/Jiangxi/2016lgfh1021/2016',
'Influenza A virus A/Jiangxi/2017lgfh0045/2016'
]
},
{
position: 11,
sequence: 'CLDFAQKIP',
count: 1,
conservation: 1.639344262295082,
motif_short: 'U',
motif_long: 'Unique',
id: [
'APQ31291.1'
],
strain: [
'Influenza A virus A/Xiamen/s228/2016'
],
country: [
'HA Hemagglutinin'
],
host: [
'Influenza A virus A/Xiamen/s228/2016'
]
}
],
variants: 3
}
我需要的是获取“motif_short”属性等于“I”的序列(而不是整行或序列列表)。有时可能有两个或多个这样的序列,但在这个特定的示例中,只有一个“I”序列
我正在使用Python(PyMongo),经过一系列尝试,我只剩下半个解决方案,头上没有头发
db.document.find({'sequences.motif_short': {"$eq": 'I'}}, {'sequences': 1, '_id': 0})
这显然给了我匹配的整个“序列”属性,这不是我想要的
我对Mongo比较陌生,所以我猜这是一个相当简单的问题。请帮帮我。您可以使用聚合()
$unwind
将序列列表拆分为多个文档
使用$match
可以应用以下条件:sequences.motif_short=“I”
使用$project
,您只保留所需的字段
下面是一个将聚合与
pymongo
结合使用的示例,非常漂亮。正是我想要的。谢谢聚合在mongodb中非常强大。你几乎可以做你想做的事情
db.collection.aggregate([
{
"$unwind": "$sequences"
},
{
"$match": {
"sequences.motif_short": {
"$eq": "I"
}
}
},
{
"$project": {
"sequences": 1,
"_id": 0
}
}
])