我在 MERN 堆疊上完成我最后一年的大學專案。我的問題在下面提到請幫助我。
const Organization = mongoose.Schema({
name: {
type: String,
required: true
},
email: {
type: String,
required: true
},
current_rating: {
type: Number,
default: 0
},
rating: [{
user: {
type: 'ObjectId',
ref:'user'
},
user_name:String,
experience: String,
feedback: String,
star: Number,
date: {
type: Date,
default:Date.now
}
}]
});
例如組織集合看起來像這樣
[
{
name: 'abc.com'
email: '[email protected]'
current_rating: 0,
rating: [
{
user: new ObjectId("623cb8bec55d003c2d9dd3da"),
user_name: 'rupesh',
experience: 'very good',
feedback: 'In publishing and graphic design, Lorem ipsum',
star: 3.5,
_id: new ObjectId("6267d9301c4ceac2d4e6956a"),
date: 2022-04-26T11:36:16.656Z
},
{
user: new ObjectId("623cb8bec55d003c2d9dd3da"),
user_name: 'rupesh',
experience: 'very good',
feedback: 'In publishing and graphic design, Lorem ipsum',
star: 4,
_id: new ObjectId("6267d9d6e6296ebf5e289155"),
date: 2022-04-26T11:39:02.918Z
},
{
// some content
},
.
.
.
//and many more rating for this organization
},
{
// data for other organization
}
]
我正在嘗試這個查詢,但它在貓鼬中不起作用
const updatedCurrentRating = await Organization.findOneAndUpdate({ _id: req.params.org_id }, {
$set: { current_rating: { $avg: 'rating.$.star' } }
}, {
new: true,
useFindAndModify: true
});
console.log(updatedCurrentRating);
AssertionError,我在這個查詢中得到
CastError: Cast to Number failed for value "{ '$avg': 'rating.$.star' }" (type Object) at path "current_rating"
at model.Query.exec (D:\react\project For Inter\server\node_modules\mongoose\lib\query.js:4650:21)
at model.Query.Query.then (D:\react\project For Inter\server\node_modules\mongoose\lib\query.js:4749:15)
at runMicrotasks (<anonymous>)
at processTicksAndRejections (internal/process/task_queues.js:93:5) {
messageFormat: undefined,
stringValue: `"{ '$avg': 'rating.$.star' }"`,
kind: 'Number',
value: { '$avg': 'rating.$.star' },
path: 'current_rating',
reason: AssertionError [ERR_ASSERTION]: The expression evaluated to a falsy value:
assert.ok(!isNaN(val))
at castNumber (D:\react\project For Inter\server\node_modules\mongoose\lib\cast\number.js:27:10)
at SchemaNumber.cast (D:\react\project For Inter\server\node_modules\mongoose\lib\schema\number.js:380:12)
at SchemaNumber.SchemaType.applySetters (D:\react\project For Inter\server\node_modules\mongoose\lib\schematype.js:1179:12)
at SchemaNumber.SchemaType._castForQuery (D:\react\project For Inter\server\node_modules\mongoose\lib\schematype.js:1613:15)
at SchemaNumber.castForQuery (D:\react\project For Inter\server\node_modules\mongoose\lib\schema\number.js:434:14)
at SchemaNumber.SchemaType.castForQueryWrapper (D:\react\project For Inter\server\node_modules\mongoose\lib\schematype.js:1580:20)
at castUpdateVal (D:\react\project For Inter\server\node_modules\mongoose\lib\helpers\query\castUpdate.js:527:19)
at walkUpdatePath (D:\react\project For Inter\server\node_modules\mongoose\lib\helpers\query\castUpdate.js:260:22)
at castUpdate (D:\react\project For Inter\server\node_modules\mongoose\lib\helpers\query\castUpdate.js:96:7)
at model.Query._castUpdate (D:\react\project For Inter\server\node_modules\mongoose\lib\query.js:4859:10) {
generatedMessage: true,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '=='
},
valueType: 'Object'
}
請告訴我如何獲得star組織的平均值并將其存盤到current_rating
謝謝你。
uj5u.com熱心網友回復:
$avg是一個聚合運算子,您不能在正常更新中使用它。但是您可以像這樣進行管道更新(它有[ {$set ...])而且您不能使用$.staron 聚合運算子,因此路徑也會更改。
玩蒙哥
const updatedCurrentRating = await Organization.findOneAndUpdate(
{ _id: req.params.org_id },
[{$set: { current_rating: { $avg: 'rating.star' } }}],
{
new: true,
useFindAndModify: true
});
console.log(updatedCurrentRating);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/468241.html
上一篇:前端HTTP請求是否必須匹配后端HTTP請求,例如:axios.patch和expressrouter.patch
下一篇:在mongoose中保存資料條目后res.redirect()與res.render()有何不同,盡管兩者具有相同的代碼?
