如何将MongoDB文档转换为数组

时间:2014-04-14 10:32:13

标签: arrays mongodb

我的返回文档如下所示:

{
    "_id": "57terjrtgutgsjj",
    "eventList": [
        {
            "eventId": "5346a816e4b0efc8bd9759b5",
            "riskScore": 0,
            "entity": {
                "entityId": "5346a816e4b0efc8bd9759b6",
                "name": "src ip",
                "value": "209.178.49.9",
                "type": "IP",
                "direction": "S",
                "isKey": "true"
            }
        }
    ]
}

我想要这种格式的结果:

{
    "_id": "57terjrtgutgsjj",
    "eventList": [
        {
            "eventId": "5346a816e4b0efc8bd9759b5",
            "riskScore": 0,
            "entity": [
                {
                    "entityId": "5346a816e4b0efc8bd9759b6",
                    "name": "src ip",
                    "value": "209.178.49.9",
                    "type": "IP",
                    "direction": "S",
                    "isKey": "true"
                }
            ]
        }
    ]
}

第一和第二文档之间的区别在于“实体”字段在第一种情况下是简单文档,而在第二种情况下是数组。 所以有可能将一个简单的文档转换为array中的一个元素。显然,该数组中只有一个对象,这与要求无关。所以任何人都可以告诉我这是否可能。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我会怀疑你是否真的想要这样做并仔细查看positional $运算符文档,了解嵌套数组通常不是好消息的原因如果你想更新它们。

但如果您确定要真的这样做,那么下面的表格将适合,并指出您当然需要先实际获取文档内容,否则使用$unset运算符:

db.collection.find({ "_id": "57terjrtgutgsjj" }).forEach(function(doc) {
    db.collection.update(
        { "_id": doc._id },
        { "$unset": { "entity": 1 } }
    );
    db.collection.update(
        { "_id": doc._id },
        { "$push": { "entity": doc.entity } }        
    ); 
)

所以一次更新,没有。实际上,你可以从MongoDB的2.6版本中获得"bulk updates"的帮助,但是你需要批量处理它的方式有所减弱。它可以应用,但您应该能够看到需要使用的编码模式。