Ema*_*aid 10 mongoose mongodb node.js
在Nodejs中使用Mongoose,您可以使用find返回一些字段.例如.
User.findOne({_id:'132324'}, {first_name:1, last_name:1}).exec...
Run Code Online (Sandbox Code Playgroud)
但我似乎无法弄清楚如何使用findOneAndUpdate返回某些字段.
User.findOneAndUpdate({_id:'132324'}, {$set : {..bla bla}}, {first_name:1, last_name:1}).exec....
Run Code Online (Sandbox Code Playgroud)
以前有人有过这个吗?我在文档中找不到它.
Nei*_*unn 23
从手册中,options参数需要一个"fields"关键字,因为还有其他细节,例如"upsert"和"new"适用的地方.在您的情况下,您还需要"new"选项:
User.findOneAndUpdate(
{ "_id": "132324" },
{ "$set": { "hair_color": "yellow" } },
{
"fields": { "first_name":1, "last_name": 1 },
"new": true
}
).exec(...)
Run Code Online (Sandbox Code Playgroud)
或者你可以使用 .select()
User.select({ "first_name": 1, "last_name": 1 }).findOneAndUpdate(
{ "_id": "132324" },
{ "$set": { "hair_color": "yellow" } },
{ "new": true }
).exec(...)
Run Code Online (Sandbox Code Playgroud)
注意到没有"new": true返回的文档处于更新修改处理之前的状态.有时这就是你的意思,但大多数时候你真的想要修改过的文档.
似乎语法findByIdAndUpdate发生了一些变化。
它的形式为 Model.findByIdAndUpdate(query, update, options, (optional callback))
根据文档,要指定返回哪些字段,您必须在options参数中指定它们。因此,使用上面的示例将是:
User.findOneAndUpdate(
{id}, //query
{ $set: { "fieldToBeChanged": "update" } }, //update
{new:true, select: "fieldIWant anotherFieldIWant"}, //options
})
Run Code Online (Sandbox Code Playgroud)
该new:true选项是没有必要的。如果省略 mongoose 默认在应用更新之前返回文档。设置为 true,它将在更新完成后返回文档。