2017-07-03 4 views
0

私はMongoDBにコレクションを持っています。 そして、配列から項目を削除したい。

私の "users"コレクションは、オブジェクトの配列です。

は私が入力した場合:モンゴシェルで

db.users.find({"tasks.task_id" : "h58sjIdj3jJZ"}).pretty() 

が、私はこの結果を得る:

{ 
    "_id" : ObjectId("5955b45b7a4bf40544019359"), 
    "profile" : { 
    "name" : "Morning bay", 
    "email" : "[email protected]", 
    "phone" : "+1-641-155-88-84", 
    "description" : "Lorem ipsum dolor sit amet, consectetur adipisicing elit" 
    }, 
    "tasks" : [ 
    { 
     "task_id" : "h58sjIdj3jJY", 
     "time" : "11:15 AM", 
     "date" : "07/01/2017", 
     "description" : "Make 1st call to John White" 
    }, 
    { 
     "task_id" : "h58sjIdj3jJZ", 
     "time" : "14:30 PM", 
     "date" : "07/09/2017", 
     "description" : "Send certificate and make Another call to J.White" 
    } 
    ], 
    "progress" : [ 
    { 
     "isActive" : "", 
     "description" : "" 
    } 
    ] 
} 

だから、私のコレクション内のすべての項目は、次のようになります。 それは大丈夫です。

しかし、今では、ユーザーアイテムの1つの「タスク」配列から1つのアイテムを削除したいと考えています。

私が入力します。

db.users.update({}, {$pull : {"tasks" : {"task_id" : "h58sjIdj3jJZ"}}}); 

この結果を得る:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 }) 

を私はエラーがどこにあるか私は理解していないので、同じように見えることでドキュメントとサンプルをお読みください。

+0

それはすべき作品。あなたのmongodb版は何ですか? –

+0

更新プログラムの第3引数として{multi:true}を追加できますか? 'db.users.update({}、{$ pull:{"タスク ":{" task_id ":" h58sjIdj3jJZ "}}}、{マルチ:true});' –

+0

はすでに試してみましたが、役に立たないです。 – alexfrize

答えて

1

更新検索クエリで{}を使用しているのは、デフォルトではfind any documentを意味し、次にタスクリスト{$pull : {"tasks" : {"task_id" : "h58sjIdj3jJZ"}}}を変更しています。

ので、おそらく別の文書には、(またはID h58sjIdj3jJZのタスクを含んでも含まなくてもよいが、その場合、それはそれを持っているかどうか、その無関係に)変更されている

あなたは、2つのオプションがあります: 使用を:

最終的にはDB内のすべての文書に触れるものを

db.users.update({}, {$pull : {"tasks" : {"task_id" : "h58sjIdj3jJZ"}}}, { multi: true });

OR

メイクの検索クエリは、より具体的な(IDを提供したり、タスクでTASK_IDを持つアイテムを探してください)

db.users.update({ "tasks.task_id": "h58sjIdj3jJZ"}, {$pull : {"tasks" : {"task_id" : "h58sjIdj3jJZ"}}});

+1

はい!私は 'db.users.update({" tasks.task_id ":" h58sjIdj3jJZ "}、{$ pull:{" tasks ":{" task_id ":" h58sjIdj3jJZ "}}})'を使用しました。ありがとうございました! – alexfrize

0

私はこれをMongoDB Terminal Onlineでテストしましたが、クエリが正しくドキュメントを取得しました。

ここにはoutputがあります。

この問題は、シェルで、またはODM(Mongooseなど)を使用していますか?

+0

私はMongooseの代わりにMongoJSを使用します。そして、はい、同じ問題があります。タスク配列から項目を削除しません。 – alexfrize

関連する問題