0

これは初心者の質問のようなものです。なぜなら、JavaScript にはまだいくつかの小さな問題があり、私を困惑させているからです。

次のコードがあります。

db.units.find({}, { _id: 1, type: 1, name: 1 }).sort({ type: 1, name: 1}).exec(function(err, units) {

  if(err) return next(err);

  _.each(units, function(u, i) {
    this[i]["available"] = !_.contains(_.pluck(_.pluck(req.workorder.units, 'unit'), 'name'), u.name);

    console.log(this[i].available);  
    console.log(this[i]);  
    console.log(_.extend(this[i],{available:this[i].available}));
  }, units); 


  return res.render('workorder/show', {
    workorder: req.workorder,
    invoices: db.invoices.find({ workorders: req.params.id }),
    units: units
  });
});

結果は次のとおりです。

true { _id: 513bd​​489b0e7e2634b60dc47、名前: '目視サンプ検査 UST-22C NC'、タイプ: 'サービス' }

利用可能なプロパティをログに記録していますが、オブジェクトだけではログに記録していません。これはなぜですか?

4

2 に答える 2

1

この問題は、マングースがオブジェクトを処理する方法に関連しています。オブジェクトは document.toObject() を使用してのみ変更できます

http://mongoosejs.com/docs/api.html#document_Document-toObject

そのようです:

  _.each(ユニット、関数(u、i) {
    u = _.extend(u.toObject(), {'利用可能': !_.contains(_.pluck(_.pluck(req.workorder.units, 'unit'), 'name'), u.name) });
  });
于 2013-10-02T22:55:48.840 に答える
0

私は、Mongoose がavailable読み取り可能で列挙不可能な方法でプロパティを定義しているのではないかと考えています。getterを使用している可能性もあれば、 or呼び出しで設定enumerable: falseしている可能性もあります。Object.defineProperty()Object.defineProperties

簡単なテストとして、このコードを Chrome コンソールまたは node.js アプリに貼り付けてみてください。

var obj = { a: 1 };
Object.defineProperties( obj, {
    b: {
        get: function() {
            return 2;
        }
    },
    c: {
        value: 3,
        enumerable: false
    }
});
console.log( obj );
console.log( obj.a );
console.log( obj.b );
console.log( obj.c );

Chrome では、コードは次のログを記録します。

Object {a: 1}
1
2
3

したがって、3 つのプロパティはすべて、明示的に読み取られると表示されますが、オブジェクト全体がログに記録されると列挙されませんbc

于 2013-10-02T17:38:01.760 に答える