猫鼬方法链顺序似乎无关紧要



我使用mongoose来查询我的数据库时,我注意到方法的顺序似乎并不重要。为什么会这样?

find({}, { __v: 0, _id: 0 })
.skip(skip)
.limit(limit)
.sort("age")

上面的查询如何得到与下面相同的数据:

find({}, { __v: 0, _id: 0 })
.sort("age")
.skip(skip)
.limit(limit)

在猫鼬模型中。find初始化并返回一个Query对象。它不向数据库服务器发送任何内容,也不执行任何数据操作。

查询对象有sort, skip, limit方法。它们都将修改查询,并返回修改后的对象。

在等待promise时执行查询,或者调用exec方法时执行查询。

本质上,find和查询方法构建了一个find数据库命令,该命令一次提交给mongodb服务器。

这两个示例片段将产生要发送的相同的数据库命令:

{
find: "collectionname",
filter: {},
sort: {"age": 1},
projection: { __v: 0, _id: 0},
skip: skip,
limit: limit
}

mongodb服务器将首先对结果进行排序,然后跳过,然后限制。如果需要以不同的顺序进行处理,请考虑使用聚合

最新更新