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

时间:2012-08-29 18:51:06

标签: node.js mongodb mongoskin

{username:'me',公司:{“yourcompany”:{...}}

我想将公司插入用户记录(用户集合),以便:

{username:'me',公司:{“yourcompany”:{...},“mycompany”:{...}}

但名字很动态..

var companyid = "mycompany";

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

给予此.. {用户名:'我',公司:{“yourcompany”:{...},“companyid”:{...}}

我该怎么做?

2 个答案:

答案 0 :(得分:6)

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

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

然后使用modifier作为findAndModify来电的第三个参数。

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

Node.js 4.x更新

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

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

答案 1 :(得分:0)

我在很多帖子上看过这个问题,其中一些很复杂 - 叫我疯了,但你可以这样做(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)

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