2017-11-14 7 views
0

mongodbにカプセル化されたmongooseクエリがあります。node obj3のjsonプロパティを返すObject.assign(obj1、obj2、obj3)

collection1.findOne({ parm: value}, function(err, item){ 
    var a = item.a; 
    var b = item.b; 
    collection2.findOne({parm1: a}, function(err, item2){ 
     collection3.findOne({parm2: b}, function(err, item3){ 
      var records = Object.assign(item, item2, item3); 
     }); 
    }); 
}); 

すべてのオブジェクトを割り当てる前にアイテム、アイテム2、アイテム3を印刷すると、異なるプロパティと同等のプロパティが印刷されます。 varレコード行の後にレコードを印刷すると、item3 jsonプロパティのみが表示されます。 documentation当たり

は、1つ以上のソースオブジェクトから対象オブジェクトへのすべての列挙独自のプロパティの値をコピーしなければなりません。ターゲットオブジェクトを返します。

これは起こっていません。間違ったことをやっているのですか?

私はasyncライブラリが必要です。インポートがobject.assignの動作を変更している可能性はありますか?

+0

オブジェクトのキーは同じですか? –

+0

いくつかの例といくつかはありません – JoaoFilipeClementeMartins

+0

最後の値と重複し、最後のjsonオブジェクトのプロパティのみを保持しないでください – JoaoFilipeClementeMartins

答えて

0

varレコード行の後にレコードを印刷すると、item3 jsonプロパティのみが表示されます。 spec

1として

III)DESCは未定義とDESCない場合。[列挙]次に

A)propValue()はnextKey、から入手することがう、真です。

b)ReturnIfAbrupt(propValue)。

c)ステータスをSetに設定します(to、nextKey、propValue、true)。 //この行を観察

d)ReturnIfAbrupt(status)。

だから、これは右への以降、左のソースから値を割り当てる

  • によって割り当て作品以来の正常な動作です。
  • は、プロパティが既に設定されているかどうかを確認しません。

デモ

var a = {a:1, b:2}; 
 
var b = {b:3, c:4}; 
 
var c = Object.assign({}, a,b); 
 
console.log(c);

観察その出力オーバーライドb

{ "":1、 "B":3、「C ":4}

+0

{}をObject.assignに追加すると、私はオブジェクトに奇妙なラッパーを取得します。それで私の質問を更新しましょう。 – JoaoFilipeClementeMartins

+1

@JoaoFilipeClementeMartinsこれらは「マングース文書」であり、「プレーンJavaScriptオブジェクト」ではないため、「変わったラッパー」があります。つまり、Object.assign({}、item.toObject()、item2.toObject()、item3.toObject())を変換する必要があります。したがって、 'console.log()'はそれらを単純なオブジェクトとして「見える」ようにしますが、単純にそうではありません。 –

+0

@ gurvinder372私は、同じキーに対して設定されるプロパティは、assign関数内のオブジェクトの順番であることを理解します。しかし、その後のjsonオブジェクトには存在しないものが失われるということは私には意味がありません。 – JoaoFilipeClementeMartins

関連する問題