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
    });
  }
}