[英]How do I add new object or push into array Mongodb Compass NodeJS Express (update is not a function)?
[英]How do i update a object in mongoDB via nodeJS?
我正在嘗試這樣做,以便當玩家獲得高分時,它會在那里搜索名稱,然后將該高分添加到那里的帳戶中。 我的問題是我不知道如何使用 mongoose 搜索名稱和更新標簽?
這是我的服務器代碼:
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 無法判斷我試圖更新哪個值。
或者,如果您更喜歡帶有 es6 的異步 function
socket.on('highscore', async highscore => {
await db.collection('dat').findOneAndUpdate(
{ nickname: player },
{ $set: { highscore: hs } }
)
});
我正在使用 ES6 Javascript 語法。 highscore => {}
與function (highscore)
我也在使用異步 function。 await
表示程序等到 function 完成
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.