ColdFusion中调用MongoDB Project()方法报错,寻求直接实现方式
ColdFusion中调用MongoDB Project()方法报错,寻求直接实现方式
我太懂这种想用原生MongoDB方法却碰壁的感觉了!你想直接用project({_id:0})来排除返回结果里的_id字段,结果ColdFusion报错说找不到这个方法,只能退而求其次先转数组再循环删字段,确实有点繁琐。
其实这个问题主要是ColdFusion对MongoDB操作的封装逻辑导致的——find()返回的游标对象在CF的封装里并没有直接暴露project()这个链式方法,不过我们有两种更直接的方式来实现你的需求,完全不用后续循环处理:
方法一:使用聚合管道(Aggregate Pipeline)
既然project是MongoDB聚合框架里的标准阶段,我们可以直接用aggregate()来把排序和投影一步完成:
RecurringType = rc.db.RecurringType.aggregate([ { $sort: { SortOrder: 1 } }, { $project: { _id: 0 } } ]).toArray();
聚合管道会按顺序执行每个阶段:先按SortOrder升序排序,再通过$project排除_id字段,最后直接返回处理好的数组,全程不需要额外的循环操作。
方法二:利用find()的第二个参数指定投影
如果你更习惯用find()的写法,其实可以直接在find()的第二个参数里传入投影规则,这也是MongoDB原生支持的写法,CF的驱动是支持的:
RecurringType = rc.db.RecurringType.find({}, { _id: 0 }) .sort({ SortOrder: 1 }) .toArray();
这里find()的第二个参数就是投影文档,{ _id: 0 }表示排除_id字段,之后再链式调用sort()排序,最后转成数组就能得到你想要的结果了。
这两种方法都比你现在用的循环删除_id的方式更高效,尤其是数据量比较大的时候,能减少内存消耗和处理时间。
内容来源于stack exchange
相关产品推荐
相关产品推荐

