比较同一文档的两个字段

Aru*_*run 3 mongodb mongodb-query aggregation-framework

我正在尝试查询一个巨大的 mongo 集合,其中包含大约 50 + 百万条记录。在 mongo 查询中,我只需要几个字段。文档中存在的对象 ID 和 MD5。为此,我做到了

询问 :

db.getCollection('experimental_engine').find({},{"md5":1,"_id":1}) 
Run Code Online (Sandbox Code Playgroud)

结果 :

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

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


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


................
Run Code Online (Sandbox Code Playgroud)

现在,我想同时匹配 "_id" 和 "md5" 并且只得到匹配的值 ( _id = md5) 。

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

请问有什么建议吗?

Ash*_*shh 8

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

db.collection.find({ "$expr": { "$eq": [ "$_id" , "$md5" ] } })
Run Code Online (Sandbox Code Playgroud)

或聚合

db.collection.aggregate([
  { "$match": { "$expr": { "$eq": [ "$_id" , "$md5" ] } } }
])
Run Code Online (Sandbox Code Playgroud)