gpt4 book ai didi

javascript - 无法让 MongoDB 更新查询在 Node.JS 中工作

转载 作者:行者123 更新时间:2023-12-02 16:41:56 24 4
gpt4 key购买 nike

我已经阅读了文档、教程等。我似乎无法找到有关如何正确更新数据库中已有条目的正确答案。

我可以很好地插入数据,但是当我尝试使用下面的查询更新它时,它失败了。这在某种程度上是错误的,但我无法弄清楚。我从文档、图等等中复制过来。仍然不行。

我的插入工作正常,所以这不可能是连接问题。

这是我的更新代码

db.collection("usercollection").findOne({ 'playerName': sPlayerName, 'playerId': sPlayerID})

db.collection("usercollection").update({ 'playerName': sPlayerName },{$set: { 'playerScore': sPlayerScore}});

我正在尝试使用 $set 更新“playerScore”字段。

据我了解,我必须先“findOne”条目,然后更新它。当我在 Node.JS 应用程序中运行更新代码时,我不断收到“TypeError:对象不是函数”错误消息。

这是我的整个功能:

    function insertEntry(sPlayerName, sPlayerID, sPlayerScore, sPlayerHealth) 
{
var Db = require('mongodb').Db,
MongoClient = require('mongodb').MongoClient,
Server = require('mongodb').Server,
ReplSetServers = require('mongodb').ReplSetServers,
ObjectID = require('mongodb').ObjectID,
Binary = require('mongodb').Binary,
GridStore = require('mongodb').GridStore,
Grid = require('mongodb').Grid,
Code = require('mongodb').Code,
BSON = require('mongodb').pure().BSON,
assert = require('assert');

var db = new Db('mdata', new Server('localhost', 27017));
db.open(function(err, db) {
if(!err) {
// Fetch a collection to insert document into
var collection = db.collection("usercollection");

if(sPlayerScore < 101) {
db.collection("usercollection").insert({ 'playerName': sPlayerName, 'playerId': sPlayerID, 'playerScore': sPlayerScore}, { w: 0 }); }

else if(sPlayerScore > 190) {
db.collection("usercollection").findOne({ 'playerName': sPlayerName, 'playerId': sPlayerID})
db.collection("usercollection").update({ 'playerName': sPlayerName },{$set: { 'playerScore': sPlayerScore}});
}
}
});
}

我知道这不完全是 ActiveRecord 或其他任何东西,但我认为我可以使用 MongoDB 以类似的方式“findByAttributes”。

编辑:

我用错误回调更新了我的查询。现在,每当出现错误时,我都会在控制台中得到以下信息:

C:\xampp\htdocs\projectapp\node_modules\mongodb\lib\mongodb\connection\base.js:246
throw message;
^
TypeError: object is not a function
at C:\xampp\htdocs\projectapp\node_modules\mongodb\lib\mongodb\collection\query.js:164:5
at Cursor.nextObject (C:\xampp\htdocs\projectapp\node_modules\mongodb\lib\mongodb\cursor.js:753:5)
at commandHandler (C:\xampp\htdocs\projectapp\node_modules\mongodb\lib\mongodb\cursor.js:727:14)
at C:\xampp\htdocs\projectapp\node_modules\mongodb\lib\mongodb\db.js:1899:9
at Server.Base._callHandler (C:\xampp\htdocs\projectapp\node_modules\mongodb\lib\mongodb\connection\base.js:453:41)
at C:\xampp\htdocs\projectapp\node_modules\mongodb\lib\mongodb\connection\server.js:481:18
at MongoReply.parseBody (C:\xampp\htdocs\projectapp\node_modules\mongodb\lib\mongodb\responses\mongo_reply.js:68:5)
at null.<anonymous> (C:\xampp\htdocs\projectapp\node_modules\mongodb\lib\mongodb\connection\server.js:439:20)
at emit (events.js:95:17)
at null.<anonymous> (C:\xampp\htdocs\projectapp\node_modules\mongodb\lib\mongodb\connection\connection_pool.js:201:13)

仅使用 findOne 查询时收到此错误消息(我暂时删除了更新查询,因为我没有得到任何信息)

if(sPlayerScore > 190) {
db.collection("usercollection").findOne({'playerName': sPlayerName, 'playerId': sPlayerID}), function(err, result) {
if(err)
throw err;

console.log("entry saved");
}};

最佳答案

你的代码到处都是。这应该可以通过简单的 findOneAndUpdate 轻松处理,如果您想创建不存在的播放器,则可以选择使用 upsert。

var MongoClient = require('mongodb').MongoClient;

function insertEntry(sPlayerName, sPlayerID, sPlayerScore, sPlayerHealth)
{
MongoClient.connect('mongodb://127.0.0.1:27017/mdata', function(err, db) {
if(err) { throw err; }

var userCollection = db.collection('usercollection');

var player = {
playerName: sPlayerName,
playerId: sPlayerID,
playerScore: sPlayerScore
};

var query = {
playerName: sPlayerName,
playerId: sPlayerID
}

var sort = {};

var options = {
upsert: true;
}

userCollection.findAndModify(query, sort, player, options, function(err, doc) {
if(err) { throw err; }

// player updated or inserted
});
}
}

关于javascript - 无法让 MongoDB 更新查询在 Node.JS 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27416638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com