2017-05-13 13 views
0

私のサーバは以前に計画されていなかったコードのため、MongoDBにプッシュされたログ文書に多くの冗長属性を追加しました。私は、データベース全体と承認されたリストに収まらない$ unset属性をロールバックしたいと思います。配列の一部ではないattitributesを削除するMongoDB

だから、基本的に、文書は次のようになります場合:

私は[「_id」、「コンテンツ」、「attr_sub」]、このように他の属性を設定解除し、私を与えるとそれを一致させたい
{ 
_id: ..., 
content: ..., 
attr_sub: ..., 
attr_sub_0_attr_sub: ..., 
... 
} 

:私の人生のために

{ 
_id: ..., 
content: ..., 
attr_sub: ... 
} 

、私はこれを行う方法を考えることはできません、... MongoDBの条件でこれが可能であるfindOneAndReplace方法について

+0

どのように["_id"、 "content"、 "attr_sub"]を渡す予定ですか? Mykolaのアプローチは、クエリがあなたが望むものと一致する場合に実行可能に見えます。しかし、単純な '$ unset'が行います。 –

答えて

0

方法を教えてください?ここで

http://mongodb.github.io/node-mongodb-native/2.2/api/Collection.html#findOneAndReplace

https://docs.mongodb.com/manual/reference/method/db.collection.findOneAndReplace/

var coll = db.collection("yourCollection"); 
var cursor = coll.find({"_id", "content"}); 
cursor.forEach(function(doc) { 
    var goodDoc = { 
     content : doc.content, 
     attr_sub : doc.attr_sub 
    }; 
    coll.findOneAndReplace({_id: doc._id}, goodDoc, function(err){ 
     console.log("Updated: " + doc._id); 
    }) 
}, function(err) { 
    console.log("Cursor done send commands. Commands still running"); 
}); 

ドキュメントを修正する簡単なコードでこの情報がお役に立てば幸いです。

関連する問題