Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.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
Javascript NodeJS和MongoDB中基于条件的查询外部访问变量_Javascript_Node.js_Mongodb - Fatal编程技术网

Javascript NodeJS和MongoDB中基于条件的查询外部访问变量

Javascript NodeJS和MongoDB中基于条件的查询外部访问变量,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我有如下模式: [ { "_id": 1, "showResult": true, "subject": "History", }, { "_id": 2, "showResult": false, "subject": "Math", } ] result = { &q

我有如下模式:

[
  {
    "_id": 1,
    "showResult": true,
    "subject": "History",
  },
  {
    "_id": 2,
    "showResult": false,
    "subject": "Math",
  }
]
result = {
 "History": 22,
 "Math": 18
}
{
 _id: 1,
 score: 22
}
JS中的一个对象如下所示:

[
  {
    "_id": 1,
    "showResult": true,
    "subject": "History",
  },
  {
    "_id": 2,
    "showResult": false,
    "subject": "Math",
  }
]
result = {
 "History": 22,
 "Math": 18
}
{
 _id: 1,
 score: 22
}
我正在使用聚合来处理查询,在此期间,如果
showResult
字段为
true
,我需要根据文档中的
subject
字段查找分数,即访问
result
变量作为map
result[$subject]

我的问题是:

db.collection.aggregate([
  {
    "$project": {
      _id: 1,
      "score":{$cond: { if: { $eq: [ "$showResult", true ] }, then: subjectObj[$subject], else: null }}

    }
  }
])
这可以在MongoDB中完成吗,我希望得到如下结果:

[
  {
    "_id": 1,
    "showResult": true,
    "subject": "History",
  },
  {
    "_id": 2,
    "showResult": false,
    "subject": "Math",
  }
]
result = {
 "History": 22,
 "Math": 18
}
{
 _id: 1,
 score: 22
}

我认为查询比JS代码花费少,但我正在添加查询,如果它能帮助您解决您的问题

  • $match
    showResult
    为真
  • $project
    要显示必填字段,
    $reduce
    要在使用
    $objectToArray
    从对象转换到数组后迭代结果循环,请检查主题匹配的条件,然后返回匹配分数

我的下一个聚合管道取决于此部分的结果