2

私はfindAndModifynode.js mongodbモジュールで使用しようとしていますmonk.これは私が使用している方法です.これは500私のcmd.

  notesCollection.findAndModify({_id:_id},[],{_id:_id,title:title,content:content},{'new':true,'upsert':true},function(err,doc){
    if(err)
        console.error(err);
    else
    {
        console.log("Find and modify successfull");
        console.dir(doc);
    }   
});

ここでメソッド署名を取得しました。次のようなエラーが表示され、情報がありません。

 POST /notes/edit/542bdec5712c0dc426d41342 500 86ms - 1.35kb
4

2 に答える 2

3

Monk は、ノード ネイティブ ドライバーによって提供されるものよりもメソッド シグネチャのシェル構文に沿ったメソッドを実装します。したがって、この場合、「シェル」のドキュメントは、次の場合.findAndModify()により適切です。

  notescollection.findAndModify(
      {
        "query": { "_id": id },
        "update": { "$set": { 
            "title": title,
            "content": content
        }},
        "options": { "new": true, "upsert": true }
      },
      function(err,doc) {
        if (err) throw err;
        console.log( doc );
      }
);

また、ドキュメントの作成時にフィールドのみを適用する場合は、演算子を使用する$setか、場合によっては演算子を使用する必要があることに注意してください。$setOnInsertこのような演算子が適用されない場合、 「全体」ドキュメントは、「更新」に指定したコンテンツに置き換えられます。

また、更新セクションに「_id」フィールドを指定する必要はありません。「アップサート」が発生した場合でも、ステートメントの「クエリ」部分に存在するものはすべて、新しいドキュメントで作成されることが暗示されるためです。

monk のドキュメントには、メソッドの署名に使用する正しい構文も示されています。

于 2014-10-02T03:59:02.363 に答える
0

同じ問題があり、気に入っていたにもかかわらず、受け入れられた答えはうまくいきませんでした。

十分に明確ではありませんが、ドキュメントは署名から始まる正しい構文を示唆しています:

  • すべてのコマンドは単純なdata[, …], fn. 例えば
    • findAndModify({}, {}, fn)

そして発見セクションから:

users.findAndModify({ _id: '' }, { $set: {} });

最後に、署名セクションに進みます。

  • 途中でオプションを渡すことができます:data[, …], options, fn

すべてを一緒に入れて:

collection.findAndModify({
    _id: '',
}, {
    $set: {
        value: '',
    },
}, {
    upsert: true,
});

したがって、この場合data[, …]は、クエリと更新という 2 つの{}, {}オブジェクトがあります。次に、コールバックをスニペットの 4 番目のパラメーターとして追加できます。

于 2015-12-29T18:42:56.853 に答える