javascript - mongodb insert 是否创建新模式

标签 javascript json mongodb monk database

我有一个已经在运行并存储数据的现有 mongoDB 服务器,假设它包含集合:“name”和“id”。 我使用 insert 命令存储这些集合。 现在我需要添加一个新集合,比如说“地址”。 我可以使用insert简单地添加“地址”集合吗? 每次我使用 insert 时 mongoDB 都会创建一个新模式还是只是更新模式?我的意思是,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);
        });
    });

谢谢!

最佳答案

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


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

我认为您是在问是否可以使用insert向文档添加新字段(即地址)。

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


您的问题 2:“每次我使用插入时 mongoDB 都会创建一个新架构,还是只是更新架构?”

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

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

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


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

再说一次,我认为你的意思是“文档”而不是“模式”。

当使用insert时,mongodb将创建一个新文档,如其他两个问题中提到的。


摘要

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

帮助您了解术语:

  • collection - 类似于 RDBMS 中的“表”;存在于数据库中;可能包含许多文档
  • document - mongodb 集合中的一条记录
  • field - 文档中的名称-值对

关于javascript - mongodb insert 是否创建新模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32124280/

相关文章:

json - OpenApi - 如何指定具有未知属性名称的响应 json

javascript - 生成的按钮失去功能

javascript - 将电子邮件数据绑定(bind)到 mailto 链接 json

mongodb - 带有 "--archive" key 的 mongodump 使用的存档格式是什么?

node.js - Mongoose 嵌套对象数组中的唯一值

python - 如何在mongodb shell中设置mongoengine的ReferenceField值?

javascript - Angular JS : Controller properties not shown in html

javascript - 如何在客户端使用 Node.js 变量?

javascript - react native : State seems to retain previous state even after reload on the simulator

javascript - 为什么自关闭脚本元素不起作用?