0

infom_col は、それ自体が次のような配列を含むフィールド rkey を含むコレクションです: rkeys -> Brands したがって、brands は ID の配列です。これらの ID は、コレクション内の他のドキュメントへの参照です。そのような依存 ID をすべて収集し、ドキュメントを 1 つずつ削除する必要があります。

これは私のコードです。エラーをスローします: TypeError: 未定義のプロパティ 'rkeys' を読み取れません

function collect_data(id)
{
  db.infom_col.find({"_id":id}, function(err,doc) {
        if(err) throw err;
        else 
        {
          console.log("else: " + doc._id);
          console.log("length: " + doc.rkeys.length);
          if(typeof(doc[0].rkeys) != 'undefined' && doc[0].rkeys != null) {
               for(key in doc[0].rkeys){
                   doc[0].rkeys[key].forEach(function(entry) {
                  //console.log("entry: " + entry); 
                     ids.push(entry);
                  //console.log(ids);
                   });
                }
                if(ids.length > 0) {
                    var id1 = ids.pop();
                    console.log(id1);
                    db.infom_col.remove({"_id":id1}, function(err,doc1) {
                        if(err) throw err;
                        else {
                          console.log("deleted: " + id1);
                          var id2 = ids.shift();
                          console.log("going to delete: " + id2);
                          collect_data(id2,null);
                        } 
                    });
                }
            }
        } 
    });
 }

アップデート1:

function collect_data(id,cb)
{
   db.infom_col.findOne({"_id":id}, function(err,doc) {
       if(err) throw err;
       else 
       {
          console.log("else: " + doc._id);
          if (doc.rkeys) {
               console.log("length: " + doc.rkeys.length);
               for(key in doc.rkeys){
                  doc.rkeys[key].forEach(function(entry) {
                      console.log("entry: " + entry);
                      ids.push(entry);
                  });
               }
               if(ids.length > 0) {
                  var id1 = ids.shift();
                  console.log("id1: " + id1);
                  db.infom_col.remove({"_id":id1}, function(err,doc1) {
                        if(err) throw err;
                        else collect_data(id1,null); 
                  });
               }
       }
   } 
 });
}
4

1 に答える 1

0

あなたが持っているエラー:それが未定義であることをTypeError: Cannot read property 'rkeys' of undefined意味します。doc[0]

まず、find をfindOneに変更します。

db.infom_col.findOne({"_id":id}, function(err,doc) {

doc[0]混乱するので、それから私は取り除きます。

その後、doc.rkeys が設定されているかどうかを確認します。

if (doc.rkeys.length > 0)

または、アンダースコア付き:

if (!_.isEmpty(doc.rkeys))
于 2013-12-30T20:22:25.503 に答える