Javascript Can';无法让MongoDB更新查询在Node.JS中工作
我已经看过了文档、教程等等。对于如何正确更新数据库中已有的条目,我似乎找不到正确的答案 我可以很好地插入数据,但当我尝试使用下面的查询更新数据时,它失败了。这在某种程度上是错误的,但我无法理解。我从文件、图坦卡蒙等处抄来的。还是不行 我的插入工作正常,因此不可能是连接问题 这是我的更新代码Javascript Can';无法让MongoDB更新查询在Node.JS中工作,javascript,node.js,mongodb,node-mongodb-native,Javascript,Node.js,Mongodb,Node Mongodb Native,我已经看过了文档、教程等等。对于如何正确更新数据库中已有的条目,我似乎找不到正确的答案 我可以很好地插入数据,但当我尝试使用下面的查询更新数据时,它失败了。这在某种程度上是错误的,但我无法理解。我从文件、图坦卡蒙等处抄来的。还是不行 我的插入工作正常,因此不可能是连接问题 这是我的更新代码 db.collection("usercollection").findOne({ 'playerName': sPlayerName, 'playerId': sPlayerID}) db.collect
db.collection("usercollection").findOne({ 'playerName': sPlayerName, 'playerId': sPlayerID})
db.collection("usercollection").update({ 'playerName': sPlayerName },{$set: { 'playerScore': sPlayerScore}});
我正在尝试使用$set更新“playerScore”字段
据我所知,我必须先“findOne”条目,然后更新它。我只是在Node.JS应用程序中运行更新代码时不断收到“TypeError:object不是函数”错误消息
以下是我的全部功能:
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}});
}
}
});
}
你的代码到处都是。这应该可以通过一个简单的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
});
}
}
对不起,我想我现在明白了。粘贴时遇到问题。好多了,谢谢。您应该为
insert
和update
调用提供回调函数,以便捕获任何错误。没有回调来获得结果的findOne
的目的是什么?我添加了回调函数,但我的错误消息并没有真正指向我可以修复的区域。似乎我遇到了严重的代码混乱-我是否在尝试使用此函数执行Mongo或Node不可能执行的操作?再次感谢。蒂莫西,首先我要非常感谢你。您的代码中有一些小的语法错误,但我能够找到答案。(一点也不抱怨),第二,如果你能向我解释为什么我的代码不起作用。我有一个大致的理解,但如果你能指出1或2个主要的事情,我想它真的会帮助我!(示例-“你的代码到处都是。”)再次感谢你!!!!!!!!!!!!!!!!!如果我能投票,我会的。我会说一件让我困惑的大事——为什么我的插入查询有效,而我的更新或findOne没有?这对我来说毫无意义。我对更新和查找的查询是否有误?存在许多问题,但我不确定是您将它们粘贴到问题中,还是它们位于原始源中。如果您将整个文件放在一个粘贴箱中(如果有减号和凭据的话),我会看一看,看看能找到什么。例如,上一个示例中的这一行`db.collection(“usercollection”).findOne({'playerName':sPlayerName,'playerId':sPlayerID}),function(err,result){`无效,因为您在传入函数之前关闭了括号。如果您实际使用了该代码,您应该会收到类似以下内容:SyntaxError:Unexpected token)
。是的,这是我创建的函数。其余的代码不是我的-其他人制作了一个socket io游戏,我只是简单地对其进行了修改,并作为一名用户进行了学习我去了。我没有得到SyntaxError},我在使用findOne()方法时得到了“TypeError:object不是函数”(insert没有问题,这让我很困惑)-再次感谢!
if(sPlayerScore > 190) {
db.collection("usercollection").findOne({'playerName': sPlayerName, 'playerId': sPlayerID}), function(err, result) {
if(err)
throw err;
console.log("entry saved");
}};
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
});
}
}