const generatedEvent = await Event.create(req.body);
res.send(generatedEvent);
我从请求正文中获取了一些数据,并且可以生成一个新的事件。当事件生成后,我会将事件返回给客户端。但是我不想返回所有带有事件的字段。我想使过滤器操作像我们这样使用选择函数的方式:Event.find().select({title:1,description:1})
我该如何在Model.create中使用此select func?
答案 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 assignment和Object shorthand property names将有助于编写更简洁的代码。
const { title, description } = await Event.create(req.body); // Object destructuring
res.send({ title, description }); // Object shorthand property names