Mongodb mongoose node.js,查询时$lt和$gt不起作用
我想让所有最后分数在15到20分之间的学生参加。为此,我使用mongoose在我的mongoDB中执行以下查询: 模型运行良好(所有其他查询都正常) 这不管用,有什么我错过的吗 *更新* 我发现了类似于: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”,虽然我没有
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();
}
});