Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 正确比较节点中的数据存储密钥_Node.js_Google App Engine_Google Cloud Datastore_Google Cloud Platform - Fatal编程技术网

Node.js 正确比较节点中的数据存储密钥

Node.js 正确比较节点中的数据存储密钥,node.js,google-app-engine,google-cloud-datastore,google-cloud-platform,Node.js,Google App Engine,Google Cloud Datastore,Google Cloud Platform,看来,@googlecloud/datastore没有提供比较键的方法,键本身也不可比较。有没有比较钥匙的正确方法?我自己也刺了几刀: function compare(key1, key2) { return (key1.kind == key2.kind) && (key1.id == key2.id) } 但是,这不适用于具有祖先的键或仅具有种类的键。所以更一般的情况可能是这样的 function compare(key1, key2) { if (key

看来,
@googlecloud/datastore
没有提供比较键的方法,键本身也不可比较。有没有比较钥匙的正确方法?我自己也刺了几刀:

function compare(key1, key2) {
    return (key1.kind == key2.kind) && (key1.id == key2.id)
}
但是,这不适用于具有祖先的键或仅具有种类的键。所以更一般的情况可能是这样的

function compare(key1, key2) {
    if (key1.path.length != key2.path.length) {
        return false;
    }

    for (var i = 0; i < key1.path.length; i++) {
        if (key1.path[i] != key2.path[i]) return false;
    }

    return true;
}
功能比较(键1、键2){
if(key1.path.length!=key2.path.length){
返回false;
}
对于(变量i=0;i

这些解决方案似乎可行,但有点难看。我缺少的只是一个内置函数吗?

你没有遗漏任何东西。数据存储的密钥比较没有内置实现。我相信这是因为它可能高度依赖于业务逻辑

我正在使用这个实现

/**
 * Compare two keys on equality
 * @param {Object} key1 
 * @param {Object} key2 
 * @return {boolean}
 */
function compareKeys (key1, key2) {
    return key1.namespace === key2.namespace && _.isEqual(key1.path, key2.path); 
}
更新

我创建了简单的npm模块,以避免在任何地方复制/粘贴此类解决方案


名称空间!谢谢你指出我错过了钥匙的另一个重要部分!也许你会对答案更新感兴趣。刚刚创建了一个npm模块用于密钥比较。