发布
社区首页 >问答首页 >向MongoDB中的集合中的类型对象数组中添加新字段

向MongoDB中的集合中的类型对象数组中添加新字段
EN

Stack Overflow用户
提问于 2016-12-08 16:23:32
回答 3查看 138关注 0票数 0

参见下面的示例(来自mongo厨师的json格式)。我需要向集合中的每个元素添加一个名为isReadOnly (bool)的新字段。我该怎么做?我可以轻松地将它添加到文档的根目录中,但在每个数组元素中都很难做到这一点。

代码语言:javascript
代码运行次数:0
复制
{ 
"_id" : "fda42f22-0fa4-4e4a-94bf-245b1124c8b9", 
"_t" : "FullConfiguration", 
"DeviceConfigName" : "Illinois", 
"Elements" : [
    {
        "_t" : "NumberConfigurationElement", 
        "AsciiConfigNumber" : NumberInt(10), 
        "DataType" : NumberInt(1), 
        "ByteOffset" : NumberInt(0), 
        "Name" : "alcohol_limit", 
        "Description" : "The alcohol limit of the device (ug/l)", 
        "AckResponse" : "HT-CONFG,010,00119", 
        "DevicePart" : NumberInt(1), 
        "Value" : NumberInt(119), 
        "DefaultValue" : NumberInt(119), 
        "Min" : NumberInt(50), 
        "Max" : NumberInt(500)
    }, .....
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-08 16:36:46

您可以这样做(如果您的集合名为“coll”):

代码语言:javascript
代码运行次数:0
复制
db.coll.find().forEach(function(e) {
    var t = e.Elements;
    t.forEach(function(e) {
        e.isReadOnly=false
    });
    db.coll.update({ _id : e._id }, { $set: { Elements : t } } );
})
票数 2
EN

Stack Overflow用户

发布于 2016-12-08 17:31:40

@Styvane,这就是我想出来的,看起来还是有点烦躁。

代码语言:javascript
代码运行次数:0
复制
var query = {
    Elements: {
        $elemMatch: {
            _t: { $exists: true },
            isReadOnly: { $exists: false }
        }
    }
};

while (db.collection.find(query).count() > 0) {
    db.collection.update(
        query, 
        { $set: { "Elements.$.isReadOnly": true } }
    );    
}
票数 0
EN

Stack Overflow用户

发布于 2019-12-20 13:10:51

@David我已经和MongoDB 3.6+合作解决了。

代码语言:javascript
代码运行次数:0
复制
db.collection.update({},
    { $set: { "Elements.$[].isReadOnly": false } }, { multi: true }
)

此命令将在文档的所有isReadOnly = false数组字段中添加Element字段。

$position修饰符指定$push操作符插入元素的数组中的位置。没有$position修饰符,$push运算符将元素插入到数组的末尾。有关更多信息,请参见$push修饰符。

您可以在位置操作符文档上找到更多细节

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41044153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档