猫鼬-选择Model.create中的特定字段

时间:2020-06-08 07:30:30

标签: node.js mongodb mongoose

 const generatedEvent = await Event.create(req.body);
 res.send(generatedEvent);

我从请求正文中获取了一些数据,并且可以生成一个新的事件。当事件生成后,我会将事件返回给客户端。但是我不想返回所有带有事件的字段。我想使过滤器操作像我们这样使用选择函数的方式:Event.find().select({title:1,description:1}) 我该如何在Model.create中使用此select func?

2 个答案:

答案 0 :(得分:0)

如果查看mongoose-source code,您会发现Model.create返回了已创建/已插入文档的承诺。无法指定过滤选项以仅返回特定字段。

当然,您可以在创建/插入新记录后结合执行.find().select()调用,但这会导致每个插入的额外DB查询量不大的意义。

相反,您可以只从返回的文档中返回所需的属性,因为您知道在诺言解决后,已成功使用提供的数据插入了新文档。所以你可以简单地做:

res.send({title: generatedEvent.title, description: generatedEvent.description});

答案 1 :(得分:0)

Model.create()在内部不会从数据库中获取文档,而是无论是否成功插入它实际上都会返回结果。如果成功,mongoose将返回猫鼬在发送到数据库之前创建的原始猫鼬文档。

因此,您可以自己选择字段。使用es2015 Object destructuring assignmentObject shorthand property names将有助于编写更简洁的代码。

const { title, description } = await Event.create(req.body); // Object destructuring
res.send({ title, description }); // Object shorthand property names