Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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
MongoDB聚合SQL Union和SQL存在like子句_Sql_Mongodb_Exists - Fatal编程技术网

MongoDB聚合SQL Union和SQL存在like子句

MongoDB聚合SQL Union和SQL存在like子句,sql,mongodb,exists,Sql,Mongodb,Exists,我想对以下数据进行MongoDB聚合查询: 收藏A { _id : 1, Active : true, hasQuery : false, Running : false, } { _id : 2, Active : true, hasQuery : true, Running : false, } { _id : 3, Active : true, hasQuery : false, Running : true, } { _id : 4, Active : true, hasQuery

我想对以下数据进行MongoDB聚合查询:

收藏A

{
_id : 1,
Active : true,
hasQuery : false,
Running : false,
}

{
_id : 2,
Active : true,
hasQuery : true,
Running : false,
}

{
_id : 3,
Active : true,
hasQuery : false,
Running : true,
}

{
_id : 4,
Active : true,
hasQuery : true,
Running : true,
}

{
_id : 5,
Active : false,
hasQuery : false,
Running : false,
}

{
_id : 6,
Active : false,
hasQuery : false,
Running : true,
}
 PrimaryKey   |    Active    |    hasQuery    |       Running
 PrimaryKey   |    Active    |    hasQuery    |       Running
这个JSON数据可以用如下的表架构表示 表A

{
_id : 1,
Active : true,
hasQuery : false,
Running : false,
}

{
_id : 2,
Active : true,
hasQuery : true,
Running : false,
}

{
_id : 3,
Active : true,
hasQuery : false,
Running : true,
}

{
_id : 4,
Active : true,
hasQuery : true,
Running : true,
}

{
_id : 5,
Active : false,
hasQuery : false,
Running : false,
}

{
_id : 6,
Active : false,
hasQuery : false,
Running : true,
}
 PrimaryKey   |    Active    |    hasQuery    |       Running
 PrimaryKey   |    Active    |    hasQuery    |       Running






如果我对表应用以下查询:

select * from A where Exists(Select * from A where A.Running=true and A.hasQuery=true) and A.Running=false and A.hasQuery=false and A.Active=true

union

select * from A where not Exists(Select * from A where A.Running=true and A.hasQuery=true) and A.Running=false and A.Active=true
我得到了这些结果: 在MongoDB中:

{
_id : 1,
Active : true,
hasQuery : false,
Running : false,
}

{
_id : 2,
Active : true,
hasQuery : true,
Running : false,
}

{
_id : 5,
Active : false,
hasQuery : false,
Running : false,
}
在SQL中:





如何使用mongoDB聚合执行相同的操作?

我成功地使用了该代码:

db.test.aggregate(
    {
         $project:
           {
               RunningActiveRecordHasQuery:
               {
                 $cond: { if: { $and: [ "$Running", "$hasQuery",  "$Active"] }, then: true, else: false }
               }           
           }
      }
      ,
      {
        $match: {
            RunningActiveRecordHasQuery :  true
        }    
      },
      function (err, results) {
        if (!err ) {
          console.log (results.result);
          match={}
          if (results.length>0) {
              match.AnyNotRunningActiveRecordHavingNoQuery=true;
          } else {
            match.AnyActiveRecordNotRunning=true;
          }
          db.test.aggregate(
          {
               $project:
                 {
                   _id: 1,
                     Running : 1,
                     Active : 1,
                     hasQuery : 1,
                     AnyNotRunningActiveRecordHavingNoQuery:
                     {
                       $cond: { if: { $and: [ {$eq: [ "$Running", false ] }, {$eq : [ "$hasQuery", false]},  "$Active"] }, then: true, else: false }
                     },
                     AnyActiveRecordNotRunning:
                     {
                       $cond: { if: { $and: [ {$eq: [ "$Running", false ] }, "$Active"] }, then: true, else: false }
                     }             
                 }
            }
            ,
            {
              $match: match  
            },
            function (err, docs) {

            }

          )
        }
      } 
)

它使用聚合来实现工作

{
_id : 1,
Active : true,
hasQuery : false,
Running : false,
}

{
_id : 2,
Active : true,
hasQuery : true,
Running : false,
}

{
_id : 5,
Active : false,
hasQuery : false,
Running : false,
}
 PrimaryKey   |    Active    |    hasQuery    |       Running
  1           |     true     |    false       |        false
  2           |     true     |    true        |        false
  5           |     false    |     false      |        false
db.test.aggregate(
    {
         $project:
           {
               RunningActiveRecordHasQuery:
               {
                 $cond: { if: { $and: [ "$Running", "$hasQuery",  "$Active"] }, then: true, else: false }
               }           
           }
      }
      ,
      {
        $match: {
            RunningActiveRecordHasQuery :  true
        }    
      },
      function (err, results) {
        if (!err ) {
          console.log (results.result);
          match={}
          if (results.length>0) {
              match.AnyNotRunningActiveRecordHavingNoQuery=true;
          } else {
            match.AnyActiveRecordNotRunning=true;
          }
          db.test.aggregate(
          {
               $project:
                 {
                   _id: 1,
                     Running : 1,
                     Active : 1,
                     hasQuery : 1,
                     AnyNotRunningActiveRecordHavingNoQuery:
                     {
                       $cond: { if: { $and: [ {$eq: [ "$Running", false ] }, {$eq : [ "$hasQuery", false]},  "$Active"] }, then: true, else: false }
                     },
                     AnyActiveRecordNotRunning:
                     {
                       $cond: { if: { $and: [ {$eq: [ "$Running", false ] }, "$Active"] }, then: true, else: false }
                     }             
                 }
            }
            ,
            {
              $match: match  
            },
            function (err, docs) {

            }

          )
        }
      }