2

我有一个已经在运行和存储数据的现有 mongoDB 服务器,可以说它包含集合:“ name ”和“ id ”。我使用insert命令存储这些集合。现在我需要添加一个新集合,让我们说“地址”。我也可以使用简单地添加“地址”集合insert吗?每次我使用mongoDB都会创建一个新模式insert还是只是更新模式?我的意思是,mongoDB 会创建一个包含上面三个的 模式,还是只会用新的模式更新现有的模式?用现有代码更好地解释自己:

var env = {
    'User': 'aaa',
    'Pass': '123',
    'stats_a': 'collectionA',
    'db_name': 'localhost:27017/nodedb',
    'proxy_name': 'proxy',
    'proxy_port': 8080
};
var monk = require('monk');
var db = monk(env.db_name);
//now i will get the collection and store data in it
 var CollectionA = db.get(env.stats_a);
// create data to insert...
      CollectionA.insert(data)

现在我想添加一个新参数var env,然后像这样插入:

var env = {
    'User': 'aaa',
    'Pass': '123',
    'stats_a': 'collectionA',
//new collection
        'stats_b': 'collectionB',
//new collection
        'db_name': 'localhost:27017/nodedb',
        'proxy_name': 'proxy',
        'proxy_port': 8080
    };
    var monk = require('monk');
    var db = monk(env.db_name);
    //now i will get the collection and store data in it
     var CollectionA = db.get(env.stats_a);
     var CollectionB = db.get(env.stats_b);
    // create data to insert...
          CollectionA.insert(data)
          CollectionB.insert(data)

如果我使用更新后的代码将起作用(假设time_stamp存在):

 var retJson = {A: {}, B: {}};
     var CollectionA = db.get(env.stats_a);
        var CollectionB = db.get(env.stats_b);

    CollectionA.findOne({}, {sort: {time_stamp: -1}}, function (err, doc) {
        retJson.A = doc;
        CollectionB.findOne({}, {sort: {time_stamp: -1}}, function (err, doc) {
            retJson.B = doc;
            res.set('Access-Control-Allow-Origin', '*');
            res.send(retJson);
        });
    });

谢谢!

4

1 回答 1

2

您的术语在您的问题中并不完全正确。但我认为这是对您的请求的一个很好的总结:您有一个 mongodb 集合,其中包含具有nameid字段的文档。insert您使用命令创建了这些文档。


您的问题 1:“我可以通过使用插入来简单地添加“地址”集合吗?”

我想您是在问是否可以使用insert.

没有insert命令用于插入新文档。如果您使用它来更新,那么该命令将失败,因为您的_id键是重复的,或者如果 _id 未给出或不存在,它将创建一个新文档。


您的问题 2:“mongoDB 是否会在我每次使用 insert 时创建一个新模式,或者它只是更新模式?”

你的措辞令人困惑。我认为您的意思是“文档”而不是“模式”。

无论如何,如果您使用insert命令将文档插入集合中并且该集合不存在,则将创建该集合并将文档插入到该新集合中。

如果集合已经存在,那么将在集合内创建一个新文档。


您的问题 3:“mongoDB 会创建一个包含上述三个模式的新模式,还是只会用新模式更新现有模式?”

同样,我认为您的意思是“文档”而不是“模式”。

使用insertmongodb 时将创建一个新文档,如其他两个问题中所述。


概括

为了进行更新,您应该使用update命令。意识到该update命令有一个upsert参数,如果为true ,则在没有文档与查询条件匹配时创建一个新文档。这可能对您有帮助。

为了帮助您的术语:

  • 集合- 类似于 RDBMS 中的“表”;存在于数据库中;可能包含许多文件
  • document - mongodb 集合中的一条记录
  • field - 文档中的名称-值对
于 2015-08-20T23:41:14.047 回答