2016-12-28 4 views
0

オブジェクトの配列を更新しようとしていますが、日付が指定された要素を見つけてそのエントリを更新するか、または日付が存在しない場合は要素を作成する必要があります。mongooseの検索方法と更新方法で項目を参照する方法は?

私たちは、私はエントリが

Entry.findOneAndUpdate({'entries.date':20161228},{'entry':['inputis','a']},{upsert:true},function(err,data){ 
       if (err) console.error(err) 
       console.log(data); 
       return res.json(data) 
      }) 

entries.entry(理由はマングースのデバッグオプションのコンソールに示されている)未定義として表示されるよう

{ 
    "_id" : ObjectId("586358f9e2ce6f42cfc024d7"), 
    "gid" : "10", 
    "entries" : [ 
     { 
      "date" : 20161228, 
      "_id" : ObjectId("586358f9e2ce6f42cfc024d8"), 
      "entry" : [ 
       "fwaf", 
       "afwaaf", 
      ] 
     } 
    ], 
    "__v" : 0 
} 

としてこのクエリ内のオブジェクトを持っているとしましょういずれも機能しません。私はこれに従った[Update nested array with Mongoose - MongoDB私はサブ文書を使用することは不可能だと思う、私は自分のデータベースを再構築すべきか、それをそのままにしておけばいい。

mongooseで見つかったオブジェクトをどのように参照できますか?私はその配列を更新することができますように?

答えて

0

になります。これを試してください:

Entry.findOneAndUpdate({'entries.date':20161228},{$set: {"entries.0.entry":["inputis","a"]}},{upsert:true},function(err,data){ 
       if (err) console.error(err) 
       console.log(data); 
       return res.json(data) 
      }) 

これは、エントリ配列の最初の要素を更新します。 「にパート(entries.entryのエントリ)を使用することはできません:私は質問で述べたように、entries.entryは動作しませんエントリの配列のすべての要素を更新するには、

{$set: {"entries.$.entry":["inputis","a"]}} 
0

それはあなたが配列要素のインデックスを指定するのを忘れてentries.entry

Entry.findOneAndUpdate({'entries.date':20161228},{'entries.entry':['inputis','a']},{upsert:true},function(err,data){ 
       if (err) console.error(err) 
       console.log(data); 
       return res.json(data) 
      }) 
+0

を使用し、それが」メッセージをというエラーがスローされます要素をトラバースする " – Bharat

関連する問題