【问题标题】:Node js query for array items in mongodbNode js查询mongodb中的数组项
【发布时间】:2016-09-08 09:28:33
【问题描述】:

我是 node js 的新手,我需要查询我的 node js 脚本,以便它从我的 MongoDB 返回查询项。 我在做什么,我使用节点 js 对特定的 questionId 应用查询,在 MongoDB 数据中得分为 1 的数据以数组形式存储, 这样查询将只返回分数的 1 questionId 而不是分数的 0。

{
"_id": "57cfc7b86f0e51ee17d4c512",
"question": [
        {
        "questionId": "57ce608e2a0d6cad8c48ef8f",
        "score": 1,
        },
        {
        "questionId": "57ce608e2a0d6cad8c48ef90",
        "score": 0,
        },
        {
        "questionId": "57ce608e2a0d6cad8c48ef91",
        "score": 0,
        }
]
}

我应用的节点 js 代码查询是 我尝试了两个查询,但它们返回所有数组项 查询 = {'question.score':1}; 查询 = {'question':{$eq:{'score':1}}};

function(){
             var query = {'question.score':1};
              childQuizInfo.findOne(query,function(err,data){
                        if(err) return next(err);
                        res.send(data);
                      });
                    }

我正在使用这个查询,所以它只返回响应“questionId”:“57ce608e2a0d6cad8c48ef8f”,但它返回数组的所有项目。

【问题讨论】:

  • 由于数组question是文档的一个字段,所以你总是会取回所有的内容。您无法通过普通查询来实现这一点,而是尝试使用 agregation documentation
  • 你可以在here试试答案。

标签: javascript arrays node.js mongodb


【解决方案1】:

使用聚合管道:

childQuizInfo.aggregate([{ $unwind: "$question" }, { $match: { "question.score": 1 } }, { $project: { "_id": 0, "questionId": "$question.questionId" } } ]);

有用的链接:

http://excellencenodejsblog.com/mongoose-aggregation-count-group-match-project/

https://docs.mongodb.com/manual/reference/operator/aggregation-pipeline/

【讨论】:

    【解决方案2】:

    这对你有用:

    db.getCollection('Test').aggregate([{$unwind:"$question"},{$match:{"question.score":1}}]);
    

    【讨论】:

      猜你喜欢
      • 2014-03-19
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      相关资源
      最近更新 更多