zhr85210078 / node-mongodb-es-connector

nodejs mongodb elasticsearch synchrodata(mongodb和es同步数据)
https://zhr85210078.github.io/node-mongodb-es-connector/#/
MIT License
77 stars 17 forks source link

m_returnfilds 以排除方式设置, update时tail 更新不成功 #13

Closed shengli963 closed 6 years ago

shengli963 commented 6 years ago

配置文件

 "m_returnfilds": { 
            "xxxx": 0
        },

util.js里这种方式返回会是一个空的doc.

var returnJsonObject = function (nativeJson, searchJson) {
    var resultJson = {};
    if (nativeJson && searchJson) {
        for (var attrNa in nativeJson) {
            for (var attrFi in searchJson) {
                if (attrNa === attrFi) {
                    resultJson[attrNa] = nativeJson[attrNa];
                }
            }
        }
    } else {
        resultJson = nativeJson;
    }
    return resultJson;
};
zhr85210078 commented 6 years ago

我之前只考虑了两个json取交集的情况,我一直都是用下面这种情况

 "m_returnfilds": { 
            "xxxx": 1
        },

我修改了一下方法,会再下一个版本中发布,如果你着急用,可以修改util.js里面的方法 贴上代码:

var returnJsonObject = function (nativeJson, searchJson) {
    var resultJson = {};
    if (nativeJson && searchJson) {
        var v = returnJsonValue(searchJson);
        if (v === 1) {
            for (var attrNa in nativeJson) {
                for (var attrFi in searchJson) {
                    if (attrNa === attrFi) {
                        resultJson[attrNa] = nativeJson[attrNa];
                    }
                }
            }
        } else if (v === 0) {
            for (var attrNa in nativeJson) {
                var flag = false;
                for (var attrFi in searchJson) {
                    if (attrNa === attrFi) {
                        flag = true;
                        continue;
                    }
                }
                if (!flag) {
                    resultJson[attrNa] = nativeJson[attrNa];
                }
            }
        } else {
            resultJson = nativeJson;
        }
    } else {
        resultJson = nativeJson;
    }
    return resultJson;
};
var returnJsonValue = function (obj) {
    var result = -1;
    if (obj && Object.keys(obj).length > 0) {
        var size = 0;
        for (key in obj) {
            if (obj[key] > -1) {
                result = obj[key];
                if (size > 0 && result !== obj[key]) {
                    result = -1;
                    return;
                }
            }
            size++;
        }
    }

    if (result !== -1 && result !== 0 && result !== 1) {
        result = -1;
    }
    return result;
};
zhr85210078 commented 6 years ago

value值只有两种情况:全部都是1或者全部都是0,如果不满足条件,就返回所有的数据 63f3ac792aa61710 参考一下mongodb文档: 62286c413724684b

shengli963 commented 6 years ago

赞, 0,和1不能交叉使用.