findOneAndUpdate 最新文档
Posted
技术标签:
【中文标题】findOneAndUpdate 最新文档【英文标题】:findOneAndUpdate the latest document 【发布时间】:2019-03-06 12:05:08 【问题描述】:这是我的架构
var BudgetSchema = mongoose.Schema(
user_email: type: String, required: true ,
user_budget: type: Number, required: true ,
platforms_budget:
type: [
platform_id: type: String, required: true ,
platform_name: type: String, required: true ,
platform_budget_percent: type: Number, required: true ,
platform_budget: type: Number, required: true ,
]
,
created: type: Date, default: Date.now()
);
var BudgetSchemaExport = module.exports = mongoose.model('Budget', BudgetSchema);
这是函数:
module.exports.updateBudgetPercent = async function (user_email, platform_name, p_budget)
var query =
"user_email": user_email,
"platforms_budget":
$elemMatch: "platform_name": platform_name
;
//the location that need to be updated
var update = "$set": "platforms_budget.$[outer].platform_budget_percent": p_budget ;
//array's index
var options = arrayFilters: [ "outer.platform_name": platform_name ] ;
var updated = await this.findOneAndUpdate(query, update, options).sort( created: -1 )
if (updated) //if the data was updated
return true;
else
return false;
该功能的目的是更新特定用户的预算。 我想更新最新的文档,但它会更新最早/第一个。
我尝试了这个选项:var updated = await this.findOneAndUpdate(query, update, options, sort: "created": -1 )
,但出现错误:
events.js:167
throw er; // Unhandled 'error' event
^
TypeError: callback.apply is not a function
有什么想法吗?谢谢。
【问题讨论】:
所以您有多个文档用于同一个user_email
,并且您想更新最新的文档。对吗?
是的,正是……
【参考方案1】:
将upsert: true
与sort: created: -1
一起使用。这是查询:
var updated = await this.findOneAndUpdate(
query,
update,
upsert: true,
sort: created: -1 ,
);
希望对你有所帮助。
【讨论】:
谢谢,但还是有回调错误。我还需要传递选项,根据这个mongoosejs.com/docs/api.html#query_Query-findOneAndUpdate,如果我传递 4 个参数,则 4 的参数是一个回调。 另外,我试过这个,但它并没有改变任何东西。 var update = "$set": "platforms_budget.$[outer].platform_budget_percent": p_budget ,upsert: true, sort: created: -1 ; 好的,在这里我可以看到您的update
变量是一个具有 3 个字段的对象。一个是$set
运算符,第二个是upsert
,第三个是sort
。但实际上在findOneAndUpdate
方法中有3 个不同的参数。不要在更新阶段使用upsert
和sort
。我给你的查询有 3 个参数 query
、update
,第三个是一个有两个字段 upsert
和 sort
的对象。您正在更新他们两个俱乐部,这可能是他们无法正常工作的原因。以上是关于findOneAndUpdate 最新文档的主要内容,如果未能解决你的问题,请参考以下文章
如何从 findOneAndUpdate 方法中获取更新的文档?
Mongoose:findOneAndUpdate 不返回更新的文档
Mongoose:findOneAndUpdate 不返回更新的文档
Mongoose:findOneAndUpdate 不返回更新的文档