0

コレクション内の各レコードには、「ip」と「timestamp」の 2 つのキーがあります。

db.posts.update({'ip' : '127.0.0.1', 'timestamp' : {'$gt' : sometimestamp}}, {'$set' : {'timestamp' : time.time()}, True)

上記のコマンドは、コレクションにない「127.0.0.1」のフィールド「ip」または「タイムスタンプ」が時々スタンプより小さい場合、新しいレコードを挿入します

ここで、コレクションに含まれていない「127.0.0.1」を含む「ip」のみの新しいレコードを挿入する場合、つまり、「ip」の値を一意に保ちます。

実行する方法 ?

4

1 に答える 1

1

あなたがおそらくやろうとしていることはこれです:

if( ip=127)
   if( ts > myts)
      update;
    else
      DO NOTHING;
else
   insert;

したがって、基本的には、2 つの異なるタイプの更新があります。これは upsert では不可能だと思います。したがって、次のように簡単な更新を使用することをお勧めします。

db.posts.update ( { 'ip' : '127.0.0.1', 'timestamp' : { '$gt' : sometimestamp } } , { '$set' : { 'timestamp' : time.time() } , False)

Pymongo でどのように記述するかはわかりませんが、論理的に言えば、次のようにします。

if (db.posts.find_one( { 'ip':'127.0.0.1'} ) != null):
    db.posts.update ( {'ip' : '127.0.0.1'}, { '$set' : {'timestamp' : time.time() } } )

残念ながら、私はパフォーマンスについてコメントすることはできません..

于 2012-07-16T08:10:51.347 に答える