【问题标题】:pymongo - how to match on lookup?pymongo - 如何匹配查找?
【发布时间】:2017-06-18 23:22:01
【问题描述】:

我有两个收藏,一个模型和一个论文收藏。我需要能够匹配他们两个的字段。它们有一个共同的字段,称为引用,其中包含一个标识符。

我想匹配具有以下内容的文档

'authors' : 来自论文集的'Migliore M' “细胞类型”:模型集合中的“海马 CA3 锥体细胞”

我的代码如下所示:

pipeline = [{'$lookup': 
                {'from' : 'models',
                 'localField' : 'references',
                 'foreignField' : 'references',
                 'as' : 'cellmodels'}},
             {'$match':
                 {'authors' : 'Migliore M', 'cellmodels.celltypes' : 'Hippocampus CA3 pyramidal cell'}},


             ]

for doc in (papers.aggregate(pipeline)):
    pprint (doc)

我没有得到任何结果。

我注意到,如果我不调用 match 参数中的 cellmodels.celltypes,它会找到与 Migliore M 匹配的论文。我怎样才能让它也匹配模型中的 celltype:'Hippocampus CA3 pyramidal cell'此查询中的集合?

【问题讨论】:

  • 你只需要在$match之前{'$unwind': '$cellmodels'}
  • 不完全确定 unwind 有什么作用,但我能够让它工作
  • 查找返回数组,因此展开会将数组转换为对象,您可以将比较应用于嵌入字段。

标签: mongodb pymongo


【解决方案1】:

这行得通:

pipeline = [{'$lookup': 
                {'from' : 'models',
                 'localField' : '_id',
                 'foreignField' : 'references',
                 'as' : 'cellmodels'}},
            {'$unwind': '$cellmodels'},
             {'$match':
                 {'authors' : 'Migliore M', 'cellmodels.celltypes' : 'Hippocampus CA3 pyramidal cell'}},
            {'$project': 
                {'authors':1, 'cellmodels.celltypes':1}} 
             ]

for doc in (papers.aggregate(pipeline)):
    pprint (doc)

【讨论】:

    猜你喜欢
    • 2011-06-16
    • 2022-12-23
    • 2019-12-25
    • 2020-07-27
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    相关资源
    最近更新 更多