node.js - 正确比较 Node 中的数据存储键

标签 node.js google-app-engine google-cloud-datastore google-cloud-platform

@google-cloud/datastore 似乎没有提供比较 key 的方法,并且 key 本身不具有可比性。有没有正确的方法来比较 key ?我自己也尝试过一些:

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;
}

这些解决方案似乎有效,但放置起来有点难看。我是否缺少一个内置函数?

最佳答案

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

我正在使用这个实现。

/**
 * 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

关于node.js - 正确比较 Node 中的数据存储键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45895460/

相关文章:

java - Google App Engine Java 从备用电子邮件地址发送邮件

google-app-engine - "App Engine flexible environment"(以前称为 "Managed VMs")中的 Google App Engine 导入问题 (golang)

python - 在谷歌云数据存储上每次插入/删除后是否有回调?

node.js - Elasticsearch : Understanding how to optimize write-heavy operations so read isn't impacted

angularjs - 如何将 Krakenjs 与 Angularjs 结合使用?

node.js - 使用 Koa 进行子域路由?

arrays - Node : How to store JSON Array in google datastore

node.js - 用户 : is not authorized to perform: cloudformation:DescribeStacks

java - 为 eclipse 运行 Google 插件需要错误 : jdk1. 7 或更高版本

python - 将谷歌云数据存储模拟器与 dev_appserver 一起使用