如何使用命令行复制和修改mongodb中的文档

时间:2014-02-14 22:52:57

标签: mongodb command-line

我正在尝试从命令行执行以下操作:

  1. 搜索集合中的某些文档
  2. 复制每个找到的文件
  3. 以相同的方式修改每个找到的文档
  4. 可以从命令行完成吗?我只能看到修改文档的方法,这很好,但我需要先复制它们。是否有可以查找,复制,修改然后查找下一个的脚本?

2 个答案:

答案 0 :(得分:0)

我认为你可以实现像这样的脚本:

var cursor = db.mycollection.find({ **criteria** } );


while (cursor.hasNext()) {
  var x = cursor.next();
  var field1 = x.field1;
  // Perform the changes 
  .
  .
  var field1T = field1.replace(/aaa/g, 'a');
  .
  .
  x.field1 = field1T;

  // this will create a dup
  delete x._id    // I'm not sure if it's delete or unset. I can't test now
  db.mycollection.insert(x);
};

然后调用它

# mongo localhost/mydatabase myscript.js

答案 1 :(得分:0)

在复制文档时,您必须记住它们具有不同的_id(它类似于主键)。您不能在具有相同_id的集合中拥有两个文档,这对于每个文档都必须是唯一的(通用数据库概念)。

现在您可以轻松复制,如:

假设您有这样的文档结构

         {_id:'12345', x:1, y:2}        // assumption

现在你可以这样做:

  1. 搜索集合中的某个文档 - >

    var doc = db.YOUR_COLLECTION_NAME.find({_id:'12345'});
    
  2. 复制每个找到的文档 - >

    doc._id = '54321';         //change the _id
    db.YOUR_COLLECTION_NAME.insert(doc); //duplicated
    
  3. 以相同的方式修改每个找到的文档

    如果要修改重复文档,请在插入之前执行此操作。在第2步。

  4. 现在对于许多文档,创建一个名为 dup.js 的文件(假设),在其中写下:

        var cur = db.YOUR_COLLECTION_NAME.find({QUERY_HERE});
        while(cur.hasNext()){
           var doc = cur.next();
           //change _id of doc to a new value and also do other modifications here
           db.YOUR_COLLECTION_NAME.insert(doc);
        }
    

    要在shell中运行脚本,请执行以下操作:

      mongo localhost:27017/YOUR_DB_NAME dup.js
    

    要理解编写脚本,请阅读:

    http://docs.mongodb.org/manual/tutorial/write-scripts-for-the-mongo-shell/