在集合返回后调用集合上的映射与使用点链接映射
Posted
技术标签:
【中文标题】在集合返回后调用集合上的映射与使用点链接映射【英文标题】:calling map on a collection after it has been returned vs chaining map using the dot 【发布时间】:2021-11-24 13:39:32 【问题描述】:这按预期工作:
let responses = await Response.find(
responder_id: req.user._id,
).populate( path: "query_id", select: ["query_type", "content"] );
responses = responses.map((response) =>
return response.query_id;
);
但以下没有:
let responses = await Response.find(
responder_id: req.user._id,
)
.populate( path: "query_id", select: ["query_type", "content"] )
.map((response) =>
return response.query_id;
);
我唯一能想到的可能是它与这些函数的异步特性有关。
【问题讨论】:
使用.populate().exec().map()
这应该会有所帮助
【参考方案1】:
优先级并不像你想象的那样。等待的不是Response.find(...)
,而是Response.find(...).populate(...)
。考虑到这一点,下面是正确写成第二种形式的方法(唯一的区别是一对括号):
let responses = (await Response.find(
responder_id: req.user._id,
)
.populate( path: "query_id", select: ["query_type", "content"] ))
.map((response) =>
return response.query_id;
);
但是,需要重新缩进以使其可读。无论如何,第一个 sn-p 可能更容易阅读。
【讨论】:
以上是关于在集合返回后调用集合上的映射与使用点链接映射的主要内容,如果未能解决你的问题,请参考以下文章