2017-07-18 4 views
0

IDが既に存在するかどうかによって、配列(target)にIDを追加または削除する必要があります。 - もし/ elseと分行わず

var isExisting = Articles.findOne({ _id }).target.indexOf(mID) > -1 

if (isExisting === false) { 
    Articles.update(
     { _id }, 
     { $addToSet: { target: mID } } 
    ) 
} else if (isExisting === true) { 
    Articles.update(
    { _id }, 
    { $pull: { target: mID } } 
) 
} 

がより良い方法でこれを行うには、それが可能です:これは私がこれをやっている方法です。 2つのDB操作?

+0

データベースメソッドは実際には "非同期"なので、デモの方法で値を返すことはできないので、このような作業をするのは間違いありません。おそらく流星?また、あなたが基本的にあなたが存在していない場所を「追加」したい、あるいは存在しているときに「削除する」と言っているので、私はあなたのロジックに従っているかどうかはわかりません。だから、全体は実際のものよりも「擬似コード」のように見え、代わりにやるべきことの実際の例で行うことができます。 1つの要求で複数の操作を行うことは確かに可能です。しかし、あなたが実際にやりたいことは何も分かりません。 –

+0

あなたは正しいです、私は流星を使用しています。そのためのタグを忘れてしまった。そして、はい、これは私の実際のコードです。私はそれを生産的に使っていますし、働いていますが、それはとても悪いと感じていますので、私はそれを最適化したいと思います... – user3142695

答えて

-1

は私の提案

let isExisting = Articles.findOne({ _id: _id, target : mID}) //mongo can search for mID in array of [mIDs] 
let query = { _id : _id }; 
let update = isExisting ? { $pull: { target: mID } } : { $addToSet: { target: mID } }; 

Articles.update(query, update); 

それが今より良く、より明確であるのですか?

0

Mongoose操作は非同期なので、コールバックがドキュメントを取得するまで待つ必要があります。

// find the article by its ID 
Articles.findById(_id, function (err, article) { 
    // make appropriate change depending on whether mID exist in the article's target 
    if (article.target.indexOf(mID) > -1) 
     article.target.pull(mID) 
    else 
     article.target.push(mID) 
    // commit the change 
    article.save(function (err) { 

    }); 
}) 

if/elseを実行していますが、2回操作していますが、ここ

関連する問題