Mongodb mongoose node.js,查询时$lt和$gt不起作用

Mongodb mongoose node.js,查询时$lt和$gt不起作用,mongodb,node.js,mongoose,Mongodb,Node.js,Mongoose,我想让所有最后分数在15到20分之间的学生参加。为此,我使用mongoose在我的mongoDB中执行以下查询: 模型运行良好(所有其他查询都正常) 这不管用,有什么我错过的吗 *更新* 我发现了类似于: Pupils.find({ "marks[-1].value": {$gt : 15, $lt : 20}}); 但这也不起作用。在这种情况下,有没有办法获取marks数组的最后一个标记?我认为它不起作用,因为mongo中的嵌入式集合是这样访问的: “marks.0.value”,虽然我没有

我想让所有最后分数在15到20分之间的学生参加。为此,我使用mongoose在我的mongoDB中执行以下查询: 模型运行良好(所有其他查询都正常)

这不管用,有什么我错过的吗

*更新*

我发现了类似于:

Pupils.find({ "marks[-1].value": {$gt : 15, $lt : 20}});

但这也不起作用。在这种情况下,有没有办法获取marks数组的最后一个标记?

我认为它不起作用,因为mongo中的嵌入式集合是这样访问的: “marks.0.value”,虽然我没有用猫鼬

不幸的是,对于您的场景,我认为没有一种方法可以使用负索引。(Mongo不能保证自然秩序的保存,除非你使用了封顶的集合)

您可以使用Map/Reduce或group命令来完成此操作


让我们考虑你的代码>学生< /代码>集合:

Pupils 
{
  _id,
  Marks(integer),
  LatestMark(int)
}
我建议将最新的标记添加到studio文档中(正如您在上面的文档中所看到的),并在每次将新标记添加到嵌套集合时更新它。 然后,您可以像这样查询它:

db.Pupils.find({ "LatestMark": {$gt : 15, $lt : 20}});
您也可以使用查询最新标记,但要小心,因为:

Javascript的执行速度比 本机运算符,但非常灵活


这不是答案,而是提示。

在使用mangose时,对特殊关键字如$elemMatch、$get、$lt等使用双引号

在以下代码中,$gt将无法正常工作

    var elmatch = { companyname: mycompany };
    var condition = { company_info: { $elemMatch: elmatch } };

    if(isValid(last_id)){
        condition._id = { $gt: new ObjectId(last_id) };
    }
    console.log(condition);

    User.find(condition).limit(limit).sort({_id: 1}).exec(function (err, lists) {
        if (!err) {
            res.send(lists);
            res.end();
        }else{
            res.send(err);
            res.end();

        }
    });
但是当我对特殊关键字使用双引号时,这个问题就解决了

    var elmatch = { companyname: mycompany };
    var condition = { company_info: { "$elemMatch": elmatch } };

    if(isValid(last_id)){
        condition._id = { "$gt": new ObjectId(last_id) };
    }
    console.log(condition);

    User.find(condition).limit(limit).sort({_id: 1}).exec(function (err, lists) {
        if (!err) {
            res.send(lists);
            res.end();
        }else{
            res.send(err);
            res.end();

        }
    });

我希望这会有所帮助。

你认为有没有办法只获得分数的最后一个要素?我也在考虑朝这个方向走,但不知道这是否正确。您说服了我:)非常感谢您的帮助。@Luc:添加额外字段时不必在意,mongodb非常适合反规范化(以及一般的任何文档数据库)。
    var elmatch = { companyname: mycompany };
    var condition = { company_info: { "$elemMatch": elmatch } };

    if(isValid(last_id)){
        condition._id = { "$gt": new ObjectId(last_id) };
    }
    console.log(condition);

    User.find(condition).limit(limit).sort({_id: 1}).exec(function (err, lists) {
        if (!err) {
            res.send(lists);
            res.end();
        }else{
            res.send(err);
            res.end();

        }
    });