2014-09-24 47 views
0

使用Mongodb和Mongoskin。我有以下數據結構:在一個Mongoskin查詢中推送多個數組

clients: { 
    firstArray: [ 
    { 
     _id: '153'. 
     someField1: 'someVal1', 
     someField2: 'someVal2' 
    } 
    ... 
    ] 

    secondArray: [ 
    { 
     _id: '7423'. 
     someField1: 'someVal1', 
     someField2: 'someVal2', 
     firstArrayIds: ['153, 154, 155, ...'] 
    } 
    ... 
    ] 
} 

是它在某種程度上可能$push目的是firstArray,並且在相同的查詢中添加_idsecondArray.firstArraysIds¨?

回答

3

誰說你不能這樣做?這是很簡單的$push是‘頂級’更新修改,因此需要一個‘文檔級’的說法案例:

db.collection.update(
    { "_id": someDocumentId, "secondArray._id": 7423 }, 
    { 
     "$push": { 
      "firstArray": someNewObject, 
      "secondArray.$.firstArrayIds": someNewObject._id 
     } 
    } 
); 

所以positional $運營商可以更新‘secondArray’的元素那符合你的條件。

不能做的唯一的事情是符合不止一個數組元素的元素在文檔中,並要求這些「陣地」進行更新。正如文件所述,只有第一個匹配索引將被存儲爲位置運算符。

但是,在你要求做的事情中,只需要單個匹配就可以了。

+0

謝謝尼爾。我希望你能立即知道這一點=) – 2014-09-24 12:06:12

+0

@AndersÖstman我今年進入到stackoverflow的大部分原因,並從根本上爲常見操作或甚至以前沒有提供的複雜問題提供合理的解釋。即使提交了各種文檔補丁,儘管得到了好評,但公司已經採取措施讓實習生以更清晰的例子重新修訂文檔。咩。我想我應該更真實地博客。 – 2014-09-24 12:14:48

+0

我有一種感覺,我應該會因此而陷入困境。請參閱此問題:http://stackoverflow.com/questions/26165650/mongodb-pull-syntax。 我真的很感謝你的幫助! – 2014-10-02 16:53:54