使用GCP Datastore Node.js SDK通过IN查询多键值报错排查
解决GCP Datastore Node.js SDK键IN查询报错问题
你遇到的InvalidKey: A key should contain at least a kind错误,是因为用__key__配合IN操作符时,SDK无法直接识别datastore.key()创建的Key对象。这里有两种解决方式:
方式一:修正查询语句
将Key对象替换为它的path属性(也就是创建键时传入的路径数组),修改后的查询代码如下:
const {Datastore} = require('@google-cloud/datastore'); const datastore = new Datastore(); const key1 = datastore.key(["User", 1]); const key2 = datastore.key(["User", 2]); // 改用key的path属性作为IN的参数 const query = datastore.createQuery("User").filter('__key__', 'IN', [key1.path, key2.path]); datastore.runQuery(query) .then(users => { console.log(users) }) .catch(err => console.log(err));
方式二:使用批量获取(推荐)
如果已经明确知道要查询的实体键,直接用datastore.get()批量获取是更高效的方案——它属于强一致性读,性能比查询更好,代码也更简洁:
const {Datastore} = require('@google-cloud/datastore'); const datastore = new Datastore(); const key1 = datastore.key(["User", 1]); const key2 = datastore.key(["User", 2]); datastore.get([key1, key2]) .then(([users]) => { console.log(users); }) .catch(err => console.log(err));
内容的提问来源于stack exchange,提问作者JayantSeth
相关产品推荐
相关产品推荐

