2012-12-16 74 views
0

我在這個主題上搜索了很多,但我完全迷失了。 這裏是我的問題(我使用Node.js的與mongojs):mongojs:將元素推入數組字段

我想有這樣的文件:

{ 
    "_id" : ObjectId("50ce2f7f98fa09b20d000001"), 
    "beginTime" : 1355689855016, 
    "tags" : { 
     "primary": [ 29, 12, 16], 
     "secondary": [6, 8, 9] 
    }, 
    "user" : "50bdddc601de4681d666835f" 
} 

但是,如果我試圖把例如新的標籤下「主」(注意,此字段來自變量),像這樣

tags = {}; 
tags[request.body.relevance] = request.body.tag; 
return db.activities.update({ 
    '_id': db.ObjectId(request.body.activity), 
    'user': request.session.user.id 
}, { 
    $push: { 
    tags: tags 
    } 
}); 

然後我得到

{ "_id" : ObjectId("50ce2f7f98fa09b20d000001"), "beginTime" : 1355689855016, "tags" : [ { "primary" : 29 }, { "primary" : "24" }, { "primary" : "1" } ], "user" : "50bdddc601de4681d666835f" } 

我嘗試了許多其他變體,包括嵌套$推(女巫變成一個字段o.o)。無論如何,我總是失敗。同樣在這一點上,我真的餓死T_T

請幫助我。謝謝。

+0

這看起來正確的給我。你如何查詢文件? Mongo分離你的數組,使他們可搜索。 –

+0

對不起,您是指「您如何查詢文檔」是什麼意思? (我忘記提及的數據是什麼?) – Sovos

回答

1

$push運算符的值需要是要推送到的數組字段,而不是父級。

試試這個:

... 
return db.activities.update({ 
    '_id': db.ObjectId(request.body.activity), 
    'user': request.session.user.id 
}, { 
    $push: { 
    'tags.primary': tags.primary, 
    'tags.secondary': tags.secondary 
    } 
}); 

UPDATE

要動態地做到這一點,你需要做這樣的事情:

... 
var push = {}; 
push['tags.' + request.body.relevance] = request.body.tag; 
return db.activities.update({ 
    '_id': db.ObjectId(request.body.activity), 
    'user': request.session.user.id 
}, { 
    $push: push 
}); 
+0

問題是,「主要」和「次要」存儲在變量中(可能有任何值):這就是問題的來源。您能否告訴我如何使用您的解決方案考慮將標籤屬性存儲到變量中? – Sovos

+0

@ user1662546好的,我更新了我假設你正在尋找的結果。 – JohnnyHK

+0

完美的工作!非常感謝! – Sovos