シナリオの説明
レコードを更新する必要がある場合、まず、このレコードの名前が 集合Collection
(それ自体を除く) に既に存在するかどうかを確認します。
論理的方向
ステップ 1: セットの中で自分を見つける
ステップ 2: 名前に従ってセットの中で自分を見つける
ステップ 3: Step 1的_id
と <🎜 を判断する> 一致するかどうかStep 2的_id
ステップ 4: 2 つの _id が一致しない場合は、「名前はすでに存在します」というプロンプトが表示され、一致しない場合はレコードの更新を完了します
。
と Step 1的_id
が一致できないことです。 Step 2的_id
リーリー
私の考えに何か問題があるのか、あるいは私のコードに何か問題があるのかもしれません...世界只因有你2017-05-02 09:24:58
あなたのコードを整理させてください。正直に言うと、私はあなたのコーディング スタイルがあまり好きではありません。あらゆる種類の不要な変数宣言がコード表現の質を低下させるからです。
まず第一に、req.bodyを使用しているため、expressを使用していると思いますリーリー
つまり、投稿リクエストには 2 つの値が渡され、1 つは _id で、もう 1 つは name です。そのため、2 つの検索結果 (2 つのドキュメント) が得られます。 ) そして、_id 検索で取得したドキュメントと名前で検索したドキュメントが同じであるかどうかを比較しようとします (もちろん、_id を比較するということは、それらが同じドキュメントであるかどうかを比較することです)あなたが指定した条件に基づいて、私は最初に、あなたが指定した req.body の _id と name が 2 つの異なるドキュメントからのものであるかどうかを推測しました。それとも、データベース内に同じ名前のドキュメントが 2 つあり、名前検索で取得したドキュメントと ID 検索で取得したドキュメントが同じではないのでしょうか。
最後の console.log の前に docById と docByName を出力して、マングース スキームを投稿して確認することができます。これにより、少なくともどのような種類のデータベースを探しているのかがわかります。
滿天的星座2017-05-02 09:24:58
リーリー
これは findOne を使用します。これは 1 つのレコードのみを返します。おそらく、ライブラリ内に同じ名前の値が複数あり、取り出した値が必要な値とは異なる可能性があります。