3

{用户名:'我',公司:{“您的公司”:{...}}

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

{用户名:'我',公司:{“您的公司”:{...},“我的公司”:{...}}

但名字是动态的..

var companyid = "mycompany";

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

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

我该怎么做呢?

4

2 回答 2

6

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

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

然后modifier用作调用中的第三个参数findAndModify

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

Node.js 4.x 更新

您现在可以使用计算属性语法直接在对象字面量中执行此操作:

collection('users').findAndModify(
    {username: usern}, 
    [['_id', 'asc']], 
    {$set:{['companies.' + companyid]: { desksmemberships:[] }}},    
    {new: true},
    function(){...});
于 2012-08-29T19:32:33.773 回答
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)

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

于 2015-12-06T08:38:35.563 回答