javascript - 如何通过 nodeJS 更新 mongoDB 中的对象?
问题描述
我试图做到这一点,以便当玩家获得高分时,它会在那里搜索名称,然后将高分添加到那里的帐户中。我的问题是我不知道如何使用猫鼬搜索名称和更新标签?
这是我的服务器代码:
var mongoose = require("mongoose");
var bodyParser = require("body-parser");
var express = require("express");
var app = express();
var http = require("http").createServer(app);
var io = require("socket.io")(http);
var PORT = 3332;
app.use("/", express.static(__dirname));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
mongoose.connect("mongodb://localhost/endg", {
useNewUrlParser: true,
useUnifiedTopology: true,
});
var db = mongoose.connection;
db.once("open", function (cb) {
console.log("connection established");
});
io.on("connection", function (socket) {
console.log("user connected");
socket.on("chooseName", function (newName) {
var data = {
nickname: newName,
highscore: 0,
};
db.collection("dat").findOne({ nickname: data.nickname }, function (
err,
doc
) {
if (err) throw err;
if (doc) {
io.emit("nnTaken", null);
} else {
db.collection("dat").insertOne(data, function (err, coll) {
if (err) throw err;
console.log("rec estab");
io.emit("newNickname", null);
});
}
});
});
socket.on("player", function (player) {
socket.on("highscore", function (hs) {
console.log(player + ": " + hs);
db.collection("dat").updateOne(
{ name: player },
{ $set: { highscore: hs } }
);
//This is where im trying to update but the above code does not work
});
});
});
http.listen(PORT, function () {
console.log("server is up and running using port " + PORT);
});
我该怎么做?我尝试在高分套接字内使用更新,这样当获得高分时,它会更新该字段但没有任何变化。
解决方案
我真的想通了。如果将来有人遇到此问题,我将发布答案。
var mongoose = require("mongoose");
var bodyParser = require("body-parser");
var express = require("express");
var app = express();
var http = require("http").createServer(app);
var io = require("socket.io")(http);
var PORT = 3332;
app.use("/", express.static(__dirname));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
mongoose.connect("mongodb://localhost/endg", {
useNewUrlParser: true,
useUnifiedTopology: true,
});
var db = mongoose.connection;
db.once("open", function (cb) {
console.log("connection established");
});
io.on("connection", function (socket) {
console.log("user connected");
socket.on("chooseName", function (newName) {
var data = {
nickname: newName,
highscore: 0,
};
db.collection("dat").findOne({ nickname: data.nickname }, function (
err,
doc
) {
if (err) throw err;
if (doc) {
io.emit("nnTaken", null);
} else {
db.collection("dat").insertOne(data, function (err, coll) {
if (err) throw err;
console.log("rec estab");
io.emit("newNickname", null);
});
}
});
});
socket.on("player", function (player) {
socket.on("highscore", function (hs) {
console.log(player + ": " + hs);
db.collection("dat").findOne({ nickname: player }, function () {
db.collection("dat").updateOne(
{ nickname: player },
{ $set: { highscore: hs } }
);
});
});
});
});
http.listen(PORT, function () {
console.log("server is up and running using port " + PORT);
});
我继续,基本上是使用 findOne 来查找球员姓名,然后使用带有 $set 的 updateOne 来更新高分值。
我猜这个问题源于 mongo 无法判断我试图更新哪个值。
推荐阅读
- r - 如何用不同的过滤器()总结(n = n())?
- javascript - Promise 数据和异常处理
- java - 无法使用 Jdbctemplate 创建 XMLType 对象
- php - 为什么当我多次咨询服务器时它返回一个 405 错误 Laravel
- javascript - 如何使用橡木服务 CSS?
- python - 如何读取目录中文件的文件内容并将副本创建到新目录中?
- python - 以 .py 结尾的文件被视为 .txt 文件,而不是在 python 空闲时启动
- python - Darknet YoloV4 空预测
- flutter - Flutter InAppWebView 不允许文本字段中包含非英文内容
- ruby-on-rails - Rails action params[:user] 未提供如何返回错误