Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – Google Datastore合并(联合)多组实体结果以实现OR条件大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用Datastore数据库Google App ENGIne上使用NodeJs.

由于Datastore does not have support the OR operator的事实,我需要运行多个查询并结合结果.

我计划运行多个查询,然后将结果合并到一个实体对象数组中.我已经有一个查询工作了.

问题:合并数据存储区返回的两个(或多个)实体集合(包括重复数据删除)的合理有效方法是什么?我相信这将是一个集合论的“联合”运作.

以下是基本查询大纲,它将使用一些不同的过滤器多次运行,以实现所需的OR条件.

//Set requester username
  const requester = req.user.userName;
  //Create datastore query on Transfer request kind table
  const task_history = datastore.createQuery('Task');
  //Set query conditions
  task_history.filter('requester',requester);
  //Run datastore query
  datastore.runQuery(task_history,function(err,entities) {
    if(err) {
      console.log('Task History JSON unable to return data results. Error message: ',err);
      return;
      //If query works and returns any entities
    } else if (entities[0]) {
      //Else if query works but does not return any entities return empty JSON response
      res.json(entities); //HOW TO COMBINE (UNION) MULTIPLE SETS OF ENTITIES EFFICIENTLY?
      return;
    }
  });

这是我的原帖:Google Datastore filter with OR condition

解决方法

恕我直言,最有效的方法是在第一阶段使用仅限密钥的查询,然后将获得的密钥组合成单个列表(包括重复数据删除),然后通过密钥查找简单地获取实体.从 Projection queries开始:

方法解决了在尝试直接组合通过常规非键仅查询获取的实体列表时可能遇到的几个问题:

>你不能正确地重复删除,因为你无法区分具有相值的不同实体和出现在乘法查询结果中的同一实体之间的区别
>按属性值比较实体可能很棘手,并且比仅比较实体键肯定更慢/更昂贵
>如果您无法在单个请求中处理所有结果,那么在不实际使用它们的情况下读取它们会产生不必要的数据存储成本
>在处理实体密钥时,分割多个请求中的实体处理(例如,通过任务队列)要简单得多

还有一些缺点:

>它可能会慢一些,因为你要去数据存储区两次:一次用于密钥,一次用于获取实际实体>您无法通过非密钥投影查询获取所需的属性

大佬总结

以上是大佬教程为你收集整理的node.js – Google Datastore合并(联合)多组实体结果以实现OR条件全部内容,希望文章能够帮你解决node.js – Google Datastore合并(联合)多组实体结果以实现OR条件所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。