2017-02-02 51 views
2

我有两个集合,一个模型和一个论文集。我需要能够匹配来自两者的字段。他们有一个共同的字段,称为引用,其中包含一个标识符。pymongo - 如何匹配查找?

我想匹配的文件已经下

“作家”:“米利M”从这些文件中收集 “celltypes”:从型号上收集海马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) 

我没有得到任何结果。

我注意到,如果我没有在匹配参数中调用cellmodels.celltypes,它会找到与Migliore M相匹配的论文。我怎样才能让它匹配celltype:'海马CA3锥体细胞'模型集合在这个查询中?

+0

你只需要'{ '$开卷': '$ cellmodels'}''之前$ match'。 – Veeram

+0

不完全确定展开做了什么,但我能够得到它的工作 – Kevin

+0

查找返回数组,因此展开将数组转换为对象,您可以应用比较嵌入字段。 – Veeram

回答

0

这工作:

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)