【发布时间】:2016-02-01 04:56:59
【问题描述】:
我想要查询中的最新文档。下面我将获取名称来自变量“personalFullName”的那些文档,然后按名为“RecordID”的字段对它们进行排序(该字段具有更高的数字作为以后的日期条目),然后抓取最后一个。我想要此查询中的最新(RecordID 编号最大的)条目:
Programs.find({ FullName: personalFullName }, { sort: { RecordID: 1 }, limit: 1}).fetch().pop();
我收到一个错误,它超出了调用堆栈大小。
【问题讨论】:
-
Programs.findOne({ FullName: personalFullName }, { sort: { RecordID: -1}}) 是否适合您?
-
我无法使用 findOne,因为查询可能返回多个具有该名称的文档。
-
@ŁukaszKapica 你确实为我解决了一个问题。尽管堆栈大小的问题是我的代码中与我的问题无关的问题,并且使用“find()”确实找到了正确的文档,但在执行更新时我不得不使用“findOne”来查找文档,即使有多个具有相同名称的文档必须进行排序。我的印象是,通过使用 findOne(),它首先会停在它找到的第一个文档处,然后对它们进行排序。看起来我的工作正好相反。
-
一旦你包含了限制过滤器,我就想弄清楚为什么 findOne 或 pop 是必要的。
-
我在 findOne() 操作之后立即执行 Collection.update({})。虽然我的限制过滤器为 1,但因为我需要通过 _id 进行更新,所以我做了:Collection.update({ _id: foo._id}, {$set: object}),并且“foo._id”是对象符号,所以 foo 需要是一个对象。 findOne() 返回文档本身(一个对象),但 find() 返回一个游标,因此更新失败。我还需要更新排序中倒数第二个文档,限制为 2。在这种情况下,我需要使用 find({...}).fetch().pop() 因为 pop() 与从数组中取出最后一个文档(对象)。