Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 仅在MongoDB中返回匹配的属性_Python_Mongodb_Pymongo - Fatal编程技术网

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
    }
  }
])