有人可以解释为什么我的简单更新/设置查询不起作用吗?我通过使用承诺的猫鼬通过nodejs进行查询。这是我的架构: const mongoose = require('mongoose');
var usersSchema = mongoose.Schema ({
username:String,
password:String,
home_planet:Number,
last_planet:Number,
experience:Number,
money:Number
}, {collection: 'account', versionKey: false});
module.exports = usersSchema;
这是我的数据库中更新/设置值的功能
const usersSchema = require('./userSchema');
const mongoose = require('mongoose');
var userModel = mongoose.model('userModel', usersSchema);
userModel.setUserGold = setUserGold;
function setUserGold(username, newGold) {
return userModel.updateOne({username:username}, {
$set: {experience:newGold}
});
}
以及对该函数的调用
userModel.setUserGold('test', 500);
在哪里测试用户名,500是该用户名要添加到数据库中的金值,但是没有设置/更新任何内容?
答案 0 :(得分:0)
我设法通过在调用函数中添加.then()来解决此问题,例如:
userModel.setUserGold('test', 500)
.then((res) => {
if (!res) return;
console.log('player updated');
});
我不确定为什么没有.then()时为什么我不工作,而没有添加.then()之前我尝试了相同的功能,但它工作得还不错,但是一会儿它停止工作,直到我添加.then ()如果有人可以解释这将意味着很多。
答案 1 :(得分:0)
第一个版本中的问题是,如果updateOne函数未提供回调,则您不提供回调或处理返回的Promise。从@ types / mongoose看到这里的定义:
function trigData() {
var table = document.getElementById('container-2');
var i;
for (var i = 0; i < 2; i++){
var tr = document.createElement('tr');
var td1 = document.createElement('td');
var td2 = document.createElement('td');
td1.setAttribute("id", "equipment");
td2.setAttribute("id", "quantity");
}
var text1 = document.getElementById("equipment").innerHTML = td1.value;
var text1 = document.getElementById("equipment").innerHTML = td1.value;
// ALSO TRIED THIS
//var text1 = document.createTextNode(td1);
//var text2 = document.createTextNode(td2);
td1.appendChild(text1);
td2.appendChild(text2);
tr.appendChild(td1);
tr.appendChild(td2);
table.appendChild(tr);
}
/////////////// BELOW IS THE WHOLE CODE ////////////////
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js">
</script>
<style>
.container-2 {
position: absolute;
top: 10%;
left: 5%;
width: 45%;
height: 30%;
margin-top: 15px;
border: 3px solid #d9d9d9;
background-color: #f2f2f2;
overflow-x: scroll;
overflow-y: scroll;
}
.container-2 table, th, td {
width: 32.5%;
height: 10px;
border: 1px solid #d9d9d9;
border-collapse: collapse;
font-size: 15px;
}
th, td {
padding: 0;
}
</style>
</head>
<body>
<div class="borrow-list-area">
<table class="container-2" id="container-2">
<thead>
<tr>
<style>th,td{text-align:center;}
</style>
<th>Equipment</th>
<th>Quantity</th>
</tr>
</thead>
<script>
// THIS IS CODE I'M HAVING TROUBLE WITH
function trigData() {
var table = document.getElementById('container-
2');
var i;
for (var i = 0; i < 2; i++){
var tr = document.createElement('tr');
var td1 = document.createElement('td');
var td2 = document.createElement('td');
td1.setAttribute("id", "equipment");
td2.setAttribute("id", "quantity");
}
var text1 = document.getElementById("equipment").innerHTML = td1;
var text2 = document.getElementById("quantity").innerHTML = td1;
td1.appendChild(text1);
td2.appendChild(text2);
tr.appendChild(td1);
tr.appendChild(td2);
table.appendChild(tr);
}
</script>
<tbody></tbody>
</table>
</div>
<div class="container" >
<!-- Trigger the modal with a button -->
<button type="button" class="button-1 btn-lg" data-toggle="modal" data-target="#myModal" style="width: 26%; margin:0; height: 40px; font-size: 100%;">Choose Equipment</button>
<!-- Modal -->
<div class="modal fade" id="myModal" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<p>Choose An Equipment Below</p>
<button type="button" class="close" data-dismiss="modal">×</button>
</div>
<div class="modal-body">
<p>Available Equipments</p>
<div class="form-inline">
<select name="dpdwn" class="drop-down">
<option selected="" disabled="">Select Equipment</option>
<option id="a" value="dpdwn-1"></option>
<option id="b" value="dpdwn-2"></option>
<option id="c" value="dpdwn-3"></option>
</select>
<br><br>
<input type="text" id="qnty-1" class="form-control" placeholder="Quantity" name="quantity" style="width:24%;"><br/>
<script>
var myObj, myJSON, text, obj;
/////////////////////////////// DISPLAY ///////////////////////////////////
// Storing data:
myObj = {
"cars" : [ "HONDA", "FIAT", "BMW" ]
};
myJSON = JSON.stringify(myObj);
localStorage.setItem("drop-down", myJSON);
// Retrieving data:
text = localStorage.getItem("drop-down");
obj = JSON.parse(text);
document.getElementById("a").innerHTML = obj.cars[0];
//document.getElementById("a").value = obj.id;
document.getElementById("b").innerHTML = obj.cars[1];
document.getElementById("c").innerHTML = obj.cars[2];
/////////////////////////////////// PASSING VALUES //////////////////////////////////////
function passValue1(a) {
text = localStorage.getItem("drop-down");
obj = JSON.parse(text);
var q = "dpdwn-1";
var b = "dpdwn-2";
var c = "dpdwn-3";
var e = document.getElementById(a);
alert(a.value);
if(a.value == q){
document.getElementById("equipment").innerHTML = obj.cars[0];
} else if(a.value == b){
document.getElementById("equipment").innerHTML = obj.cars[1];
} else {
document.getElementById("equipment").innerHTML = obj.cars[2];
}
}
function passValue2(b) {
document.getElementById("quantity").innerHTML = document.getElementById("qnty-1").value;
}
</script>
<br/><br/>
</div>
</div>
<div class="modal-footer">
<input class="submit-3" type = "submit" value = "Submit" name= "submit-2" onclick="trigData(); passValue1(dpdwn); passValue2(document.getElementById('qnty-1').value)"data-dismiss="modal" />
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
</div>
要解决您的问题,请为updateOne函数提供回调或像处理第二个版本一样处理Promise。