Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在MongoDB中插入或更新多个文档_Node.js_Mongodb - Fatal编程技术网

Node.js 在MongoDB中插入或更新多个文档

Node.js 在MongoDB中插入或更新多个文档,node.js,mongodb,Node.js,Mongodb,我想用NodeJS和MongoDB支持实现hashtags功能,这样我也可以计算使用情况。每当用户向页面添加hashtag时,我都希望在数据库中推送或更新它们。每个hastag如下所示: {_id:<auto>, name:'hashtag_name', uses: 0} {u id:,name:'hashtag_name',使用:0} 我面临的问题是,用户也可以添加新标记,因此当他单击“完成”时,我必须增加现有标记的“使用”字段,并添加新标记。诀窍是如何只使用一条Mongo指令

我想用NodeJS和MongoDB支持实现hashtags功能,这样我也可以计算使用情况。每当用户向页面添加hashtag时,我都希望在数据库中推送或更新它们。每个hastag如下所示:

{_id:<auto>, name:'hashtag_name', uses: 0}
{u id:,name:'hashtag_name',使用:0}
我面临的问题是,用户也可以添加新标记,因此当他单击“完成”时,我必须增加现有标记的“使用”字段,并添加新标记。诀窍是如何只使用一条Mongo指令来实现这一点?到目前为止,我想到了两种可能的方法来实现这一点,但我对这两种方法都不是特别满意:

选项1

我有一个服务,它在用户开始写新文章之前从数据库中获取现有标记。基于此,我可以检测哪些标记是新的,并运行2个查询:一个将添加新标记,另一个将更新现有标记

选项2

我将把标签列表发送到服务器,在那里我将为每个标签运行find();如果我找到了,我会更新,如果没有,我会创建它

选项3(目前没有解决方案)

最好的选择是运行一个查询,其中包含一个标记名数组,对现有的标记名执行$inc操作,然后添加缺少的标记名

问题


有更好的解决办法吗?我能从选项3中获得最终结果吗

我将使用Mongodb自2.6版以来提供的。同样,当标签是新的时,您可以执行插入操作,当它已经存在时,计数器将更新。

我将使用Mongodb自2.6版以来提供的。同样,当标签是新的时,您可以执行插入操作,当它已经存在时,计数器会更新。

您应该这样做,所有这些操作都将在一个批中执行,这只是一个简单的想法如何执行:

var db = new Db('DBName', new Server('localhost', 27017));
    // Establish connection to db
    db.open(function(err, db) {
    // Get the collection
    var col = db.collection('myCollection');

    var batch = col.initializeUnorderedBulkOp();

    for (var tag in hashTagList){
      // Add all tags to be executed (inserted or updated) 
      batch.find({_id:tag.id}).upsert().updateOne({$inc: {uses:1}});
    }

    batch.execute(function(err, result) {
      db.close();
    });
  });

您应该这样做,所有这些都将在一个批处理中执行,这只是如何执行的一个片段:

var db = new Db('DBName', new Server('localhost', 27017));
    // Establish connection to db
    db.open(function(err, db) {
    // Get the collection
    var col = db.collection('myCollection');

    var batch = col.initializeUnorderedBulkOp();

    for (var tag in hashTagList){
      // Add all tags to be executed (inserted or updated) 
      batch.find({_id:tag.id}).upsert().updateOne({$inc: {uses:1}});
    }

    batch.execute(function(err, result) {
      db.close();
    });
  });

您当前的mongodb版本是什么,3.x?是的,3.x。忘了提了,对不起,你现在的mongodb版本是什么,3.x?是的,3.x。忘了提及,抱歉“您请求的URL不存在或已被删除。”我看到了一个批量示例,但不确定如何使其适应我当前的情况。这将通过编程实现,我不需要从控制台执行。你说的是对的,URL是错误的,我修复了它。无论如何,姆索利曼的回答是正确和完整的。“您请求的URL不存在或已被删除。”我看到了一个批量示例,但不确定如何使其适应我当前的情况。这将通过编程实现,我不需要从控制台执行。你说的是对的,URL是错误的,我修复了它。无论如何,姆索利曼的回答是正确和完整的。问候。似乎在控制台中起作用,现在的问题是它在mongoskin:D中不起作用。无论如何,这是原始问题的答案。似乎在控制台中起作用,现在的问题是它在mongoskin:D中不起作用。无论如何,这是原始问题的答案。。