1

看来@google-cloud/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

你不会错过任何东西。数据存储的关键比较没有内置的实现。我相信这是因为它可能高度依赖于业务逻辑。

我正在使用此实现。

/** 
* 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模块,以不到处复制/粘贴这样的解决方案。

https://www.npmjs.com/package/datastore-key-compare

+0

命名空间!感谢您指出我错过了关键的另一个重要部分! – TamTamTam

+1

也许您会有兴趣回答更新。刚刚创建了一个用于比较键的npm模块。 – QuestionAndAnswer