【问题标题】:Remove attitributes not apart of an array MongoDB删除不属于数组 MongoDB 的属性
【发布时间】:2017-05-13 04:38:52
【问题描述】:

由于之前一些计划不周的代码,我的服务器为推送到 MongoDB 的日志文档添加了许多冗余属性。我想遍历整个数据库和不符合批准列表的 $unset 属性。

所以基本上,如果一个文档看起来像这样:

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

我想将它与 ["_id", "content", "attr_sub"] 匹配,从而取消设置其他属性,并给我:

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

对于我的生活,我想不出办法做到这一点,请告诉我这在 mongodb 条件下是可能的......

【问题讨论】:

  • 你打算怎么传入["_id", "content", "attr_sub"]?如果查询与您想要的匹配,Mykola 的方法似乎是可行的。虽然一个简单的$unset 就可以了。

标签: javascript json mongodb


【解决方案1】:

findOneAndReplace 方法怎么样?

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");
});

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-07
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    相关资源
    最近更新 更多