EnterpriseDB / mongo_fdw

PostgreSQL foreign data wrapper for MongoDB
GNU Lesser General Public License v3.0
329 stars 70 forks source link

Not support `$project` some specified column when `SELECT` part of columns #156

Open zhang699 opened 2 years ago

zhang699 commented 2 years ago

I have investigate the actual mongo command that issued from mongo_fdw when using SELECT _id FROM warehouse

by setting following in mongodb, we can examine actual commands from mongo side

db.setProfilingLevel(2)
db.collection("system.profile").sort({"ts": -1})

even if only SELECT _id FROM warehouse, it issue the commands seems return entire document without $project in aggregation pipeline,

"command" : {
        "aggregate" : "warehouse",
        "pipeline" : [ 
            {
                "$match" : {}
            }
        ],
        "cursor" : {},
        "$db" : "db",
        "lsid" : {
            "id" : UUID("0c5b5caf-229b-4db3-b66a-04305ac9c4e5")
        }
    },

I think it cost much IO (network/disk) time to transfer unwanted data that postgresssql side doen't ask. Could mongo_fdw needs support that in the near future ?
or correct me If I forgot to configure something to use $project, I use meta driver and mongoc is 1.17.3

vaibhavdalvi93 commented 2 years ago

Hi @zhang699

correct me If I forgot to configure something to use $project, I use meta driver and mongoc is 1.17.3

Your observation is correct. Currently, there is NO way to use $project.

The mongo_fdw don't support column push down. The reason behind this is mentioned in one of the comments in the code i.e. column push down resulting in performance degradation. The comment says,

`
/*

I think it cost much IO (network/disk) time to transfer unwanted data that postgresssql side doen't ask. Could mongo_fdw needs support that in the near future ?

We have to do more study around this to come to the conclusion. We have added this to the TO-DO list. We will work on this in near future.

zhang699 commented 2 years ago

Thanks !!