Nodejs

2017-06-25 8 views
1
にモンゴで$ not演算子を使用する方法

は、私はこのような書類の束とモンゴDBを持って言う:Nodejs

{ 
    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:不明なトップレベルの演算子:$ません"。

どうすればこのような否定を行うことができますか?

注:これを1回のアトミック操作で実行したいと考えています。私は複数のクエリでそれを行うことができることを知っていますが、後で一括操作を使用してこれを設定したい場合、それは動作しません。

+0

は、あなたが実際にこのために、ここで '$のne'をしたい、あなたの問題解決することがあり、上記のようにフィールドを照会するために使用します場合。また、 "upsert"との組み合わせでは、決して否定を使わないでください。代わりに2つの操作を行う必要があります。 [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 
    }); 

$されていない

この