无法"$set"(猫鼬)工作,我只需要更新我的 mongo DB 数据库中的一个可用值



我需要创建一个函数,该函数只更新数据库中的余额(所有其他变量都必须是常量(。我读到我可能需要使用set函数,但我不知道如何使用它。也许有人能帮我?

router.put('/:id', function (req, res, next) {
Account.findByIdAndUpdate({_id: req.params.id}, {$set : {account.balance, req.body}}).then(function(account){
Account.findOne({_id: req.params.id}).then(function(account){
res.send("Account balance updated n" + account);
});
});

账户架构

const mongoose = require('mongoose');
const express = require('express');
const router = express.Router();
// Jeg laver et "account" skema
const AccountSchema = new mongoose.Schema({
// Alle som strings, udover "id"
_id: mongoose.Schema.Types.ObjectId,
client_id: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Client',
required: true,
},
balance: {
type: Number,
required: true,
},
alias: {
type: String,
required: false,
}
});
const model = mongoose.model('Account', AccountSchema);
module.exports = model;

首先,您要查询两次,我不知道为什么。

您正在执行findByIdAndUpdate(),并在回调中再次找到该元素。我想这是为了得到最新的文件。但是有一种更好的方法可以这样使用{new:true}int:

model.findOneAndUpdate({_id: req.params.id}, {$set : {"account.balance", req.body}},{new: true},(error,doc)=>{
console.log("doc = ",doc)
})

我认为错误的另一件事(但不知道模式就不容易知道(是,您正在将整个req.body添加到balance字段中。我不知道req.body包含什么,但我认为这需要更改。

看看这个查询,我想这就是你想要的:

db.collection.update({
"_id": 0
},
{
"$set": {
"balance": 20
}
})

示例

$set用于要更新的字段。在这种情况下,balance

请注意,新对象只是一个数字,我认为您的req.body是一个完整的对象。这就是为什么没有更新的原因。

使用mongoose尝试以下操作:

var balance = req.body.balance; //or whatever you get the value, but remember, it expects a Number
model.findOneAndUpdate({"_id": req.params.id}, {"$set" : {"balance", balance}},{new: true},(error,doc)=>{
console.log("doc = ",doc)
})

最新更新