我正在尝试编写一个返回满足条件的键和对象的查询。假设我有一个文档,看起来像这样。
page1:{
key1:100,
k2:50,
k3:10
}
page2:{
k1:50,
k2:100,
k3:10
} 在本例中,我想从第2页对象返回k1和k2,因为k2大于k1。这是我的查询的样子;
collection.find({$or:[
{page1.k2:{$gt:page1.k1}},
{page2.k2:{$gt:page2.k1}}
]})它返回一个空的文档列表,但我知道在某些情况下条件为真。有什么建议吗?
发布于 2020-05-22 10:40:22
如果你的mongo版本是>= 3.6,你可以使用$expr。
您的示例文档在page1中有"key1“,在page2中有"k2”。
PyMongo需要所有东西都放在引号中。
尝试:
coll.find({
'$or': [
{'$expr': {'$gt': ['$page1.k2', '$page1.key1']}},
{'$expr': {'$gt': ['$page2.k2', '$page2.k1']}}
]
})返回(集合中只有1个文档示例):
{'_id': ObjectId('5ec735d39f4bd37cc16b4083'),
'page1': {'k2': 50, 'k3': 10, 'key1': 100},
'page2': {'k1': 50, 'k2': 100, 'k3': 10}}https://stackoverflow.com/questions/61941740
复制相似问题