0

一部のデータをグローバルに修正しようとしています...なぜこのエラーが発生するのですか...TypeError:Object function model(doc、fields、skipId){if(!(this instanceof model))r

すべてのデータを取得しています。更新する必要がありますが、更新されません。そしてエラーは鈍いです。

UpdateAllThings: function(req, res) {
    things.find().exec( function(err, items) {
        items.forEach(function(th) {
            th.Features.forEach(function(f) {
                thingsfeatures.findOne({'fName': f.fName},function(err, item) {
                    if (item != null ) {
                        try{
                            things.Update({Features: {"$elemMatch":{_id:f._id}}}, {$addToSet: {'Features.$.tType': item.tType, 'Features.$.fGroup': item.fGroup }}, function (err, inventory) {
                                if (err) return handleError(err);
                            });
                        }catch(err){
                            if (err) return handleError(err);
                        }

                    }
                });
            });
        });

    });
     return res.send('thanks please come again');
}

* _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ *

確かに:これは多かれ少なかれそれです...

{
  "Features" : [{
      "_id" : ObjectId("5013c9742df16337609b2706"),
      "tID" : "5013c9742df16337609b26f4",
      "tName" : "Canon EOS T2i (Rebel T2i, Canon 550D) ",
      "fName" : "Retail Price:",
      "fValue" : "899.99",
      "_keywords " : ["899.99"]
    }, {
      "_id" : ObjectId("5013c9742df16337609b2707"),
      "_keywords " : ["1", "x", "Proprietary", "LP-E8", "Lithium-ion", "rechargeble"],
      "fGroup" : ["Power"],
      "fName" : "Batteries Included:",
      "fValue" : "1 x Proprietary LP-E8 Lithium-ion rechargeble",
      "tID" : "5013c9742df16337609b26f4",
      "tName" : "Canon EOS T2i (Rebel T2i, Canon 550D) ",
      "tType" : ["Cammera"]
    }],
  "_id" : ObjectId("5013c9742df16337609b26f4"),
  "tName" : "Canon EOS T2i (Rebel T2i, Canon 550D) ",
  "tType" : "Camera"
}

これは機能しましたが、新しいフィールドとデータだけでなく、データを含む配列に追加されました。

db.things.update({"_id":ObjectId("5013c9742df16337609b26f4"), "Features._id" : ObjectId("5013c9742df16337609b2706") }, { $addToSet : { "Features.$.fType" : "Cammera", "Features.$.fGroup"  : "Power" }})
4

1 に答える 1

0

キャピタライゼーションを1つ発行します。ありがとうジョニー

問題2:Addtosetは配列を作成し、そこにあるセットに追加せずに新しいセットを作成します。したがって、setを使用するだけです。(個人的に紛らわしいドキュメント)

3番目:ネストされたセットを更新するには、次のようにします。これは、elementmatchやその他の形式を使用するよりもはるかに優れています。

db.things.update({"_id":ObjectId("5013c9742df16337609b26f4"), "Features._id" : ObjectId("5013c9742df16337609b2706") }, { $set : { "Features.$.fType" : "Cammera", "Features.$.fGroup"  : "Power" }})
于 2012-08-30T18:45:16.813 に答える