Node.js Nodejs Mongo插入子文档-动态字段名

Node.js Nodejs Mongo插入子文档-动态字段名,node.js,mongodb,mongoskin,Node.js,Mongodb,Mongoskin,{用户名:'me',公司:{“yourcompany”:{…} 我想在用户记录(用户集合)中插入一家公司,以便: {用户名:'me',公司:{“yourcompany”:{…},“mycompany”:{…} 但名称是动态的 var companyid = "mycompany"; .collection('users').findAndModify( {username: usern}, [['_id', 'asc']], {$set:{companies:{companyid: { d

{用户名:'me',公司:{“yourcompany”:{…}

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

{用户名:'me',公司:{“yourcompany”:{…},“mycompany”:{…}

但名称是动态的

var companyid = "mycompany";

.collection('users').findAndModify(
{username: usern}, 
[['_id', 'asc']], 
{$set:{companies:{companyid: { desksmemberships:[] }}}},    
{new: true}, function(){...}
给出此..{用户名:'me',公司:{“yourcompany”:{…},“公司ID”:{…}


如何执行此操作?

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

var modifier = { $set: {} };
modifier.$set['companies.' + companyid] = { desksmemberships:[] };
然后使用
modifier
作为
find和modify
调用中的第三个参数

您还可以考虑将<代码>公司< /C> >作为数组而不是嵌入对象。

Node.js 4.x更新

现在,您可以使用语法直接在对象文本中执行此操作:

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

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

我的数据库架构“matches”设置为数组。在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)
可以使用括号中的任何变量