比较同一文档的两个字段

时间:2018-07-17 16:47:46

标签: mongodb mongodb-query aggregation-framework

我正在尝试查询一个巨大的mongo集合,该集合具有约50亿以上的记录。在mongo查询中,我只需要几个字段。文档中存在的对象ID和MD5。为此,我做了

查询:

db.getCollection('experimental_engine').find({},{"md5":1,"_id":1}) 

结果:

/* 1 */
{
    "_id" : "5cee41f2ca4e0ebf567ffd1be5cdaf1f",
    "md5" : "1d813cb29082b13efe572e8088f006dd"
}

/* 2 */
{
    "_id" : "fcd79aac0d5c5ebdfd0fa389368ab6f3",
    "md5" : "13a1a6cd5c8f1c5eaf3d409f4d809889"
}


/* 3 */
{
    "_id" : "2a0b42d01892bd9b7368d045a4c7862c",
    "md5" : "2a0b42d01892bd9b7368d045a4c7862c"
}


................

现在,我想同时匹配“ _id”和“ md5”并只获取匹配的值(_id = md5

mongo命令是否支持两个键的匹配值?

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

您可以使用$expr来允许在查询语言中使用聚合表达式。

db.collection.find({ "$expr": { "$eq": [ "$_id" , "$md5" ] } })

或聚合

db.collection.aggregate([
  { "$match": { "$expr": { "$eq": [ "$_id" , "$md5" ] } } }
])