【问题标题】:Nodejs Mongo insert into subdocument - dynamic fieldnameNodejs Mongo插入子文档 - 动态字段名
【发布时间】:2019-01-23 13:05:49
【问题描述】:

{username:'me', Companies:{"yourcompany":{...}}

我想在用户记录(用户集合)中插入一家公司,以制作:

{username:'me', Companies:{ "yourcompany":{...}, "mycompany":{...} }

但是名字是动态的..

var companyid = "mycompany";

.collection('users').findAndModify(
{username: usern}, 
[['_id', 'asc']], 
{$set:{companies:{companyid: { desksmemberships:[] }}}},    
{new: true}, function(){...}

给这个.. {username:'me', Companies:{ "yourcompany":{...}, "companyid":{...} }

我该怎么做?

【问题讨论】:

    标签: node.js mongodb mongoskin


    【解决方案1】:

    您必须以编程方式构建您的 $set 修饰符:

    var modifier = { $set: {} };
    modifier.$set['companies.' + companyid] = { desksmemberships:[] };
    

    然后在您的findAndModify 调用中使用modifier 作为第三个参数。

    您可能还想考虑将companies 更改为数组而不是嵌入对象。

    Node.js 4.x 更新

    您现在可以使用computed property 语法直接在对象字面量中执行此操作:

    collection('users').findAndModify(
        {username: usern}, 
        [['_id', 'asc']], 
        {$set:{['companies.' + companyid]: { desksmemberships:[] }}},    
        {new: true},
        function(){...});
    

    【讨论】:

      【解决方案2】:

      我在很多帖子上都看到过这个问题,其中一些非常复杂——说我疯了,但你可以这样做(node + mongo):

      我的数据库架构“匹配”设置为一个数组。在 mongo 数据中 [match.matchId] 变为 '2028856183'。

      db.update({key: value}, {matches: [{[match.matchId] : match}] }, callback);
      db.update(what to find, what to change it to, what to do next)
      

      您可以使用括号中的任何变量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-24
        • 2021-03-28
        相关资源
        最近更新 更多