2017-06-25 66 views
1

說我有一個這樣的一堆文件,一個蒙戈DB:

{ 
    key: 'somekey', 
    events: [ 
     {event_id: '001', event_info: 'blah'}, 
     {event_id: '001', event_info: 'blah'}, 
     ...etc 
    ] 
} 

我想一個新的事件添加到文檔,其中的事件列表key ='X',但僅限於該事件(由event_id標識)尚未出現。

我嘗試這樣做:

collection.update({ 
     'key': newKeyValue, 
     $not { events.event_id: newEventId } 
    }, 
    { 
     '$push': { 'events': newEvent } 
    }, 
    { 
     'upsert': true 
    }); 

但我得到的錯誤: 「MongoError:未知名頂級運營商:$不」。

我該如何做這樣的否定?

另請注意:我希望能夠在一個原子操作中做到這一點。我知道我可以用多個查詢來做到這一點,但是如果我以後想用批量操作來設置它,那就行不通了。

+0

你真的想'$ ne'這裏這個案件。此外,不要在與「upsert」相結合的情況下使用否定。你可能應該做兩個操作。 [請參見使用MongoDB模擬「喜歡」投票系統](https://stackoverflow.com/questions/28006521/how-to-model-a-likes-voting-system-with-mongodb) –

回答

0

查詢是錯誤的嘗試下面的查詢

collection.update({ 
     'key': newKeyValue, 
     events.event_id: { $not:{$eq: newEventId }} 
    }, 
    { 
     '$push': { 'events': newEvent } 
    }, 
    { 
     'upsert': true 
    }); 

$不就是用它來查詢的字段如上

這可能解決您的問題