如何从 mongo shell 脚本输出将 ids 转换为 JUUID 格式

问题描述 投票:0回答:1

使用 Java LUUID(旧版表示)存储 MongoDB id,当运行脚本来检索这些 id 时,输出会以二进制格式显示它们:

var myStringArray = ["string1",
    "string2"];

for (var i = 0; i < myStringArray.length; i++) {

    let outputs = db.getCollection("MyCollection").aggregate(
        {
            '$match': {
                "field1": myStringArray[i]
            }
        }

        , { $project: { _id: 1, "field1": 1 } }
    ).map(function (el) { return EJSON.stringify(el) });

    console.log(outputs);
} 

输出:

[
  '{"_id":{"$binary":{"base64":"Z0raDiKJKdjkWnqi5TvWjQ==","subType":"03"}},"field1":"string1"}'
]
[
  '{"_id":{"$binary":{"base64":"a0xH8uquuKwwbsRc4LggvA==","subType":"03"}},"field1":"string2"}'
]

更喜欢看到类似于

"_id"
"_id": JUUID("ACB8AEEA-D247-4C6B-BC20-B8E05C146F30")

注意:我不是问如何以子类型 4(标准)UUID 格式存储。 MongoDB 驱动程序设置为 UuidRepresentation.JAVA_LEGACY 并且不会更改。

mongodb
1个回答
0
投票

最接近获得十六进制表示形式的是使用

.toString('hex', 3)

db.collection.insertOne({_id: BinData(3, "Z0raDiKJKdjkWnqi5TvWjQ==") ,"field1":"string1"})
var doc = db.collection.findOne({})
doc._id.toString('hex')  // 674ada0e228929d8e45a7aa2e53bd68d

// to verify that 
Binary.createFromHexString(doc._id.toString('hex', 3), 3)
// returns Binary.createFromBase64('Z0raDiKJKdjkWnqi5TvWjQ==', 3)

Binary.createFromHexString("674ada0e228929d8e45a7aa2e53bd68d", 3)
// returns Binary.createFromBase64('Z0raDiKJKdjkWnqi5TvWjQ==', 3)

对于您的数据和代码,请使用:

db.collection.insertMany([
  { "_id": BinData(3, "Z0raDiKJKdjkWnqi5TvWjQ=="), "field1": "string1" },
  { "_id": BinData(3, "a0xH8uquuKwwbsRc4LggvA=="), "field1": "string2" },
]);

var myStringArray = ["string1", "string2"];

for (var i = 0; i < myStringArray.length; i++) {
    let output = db.getCollection("collection").aggregate(
        { $match: { "field1": myStringArray[i] } },
        { $project: { _id: 1, "field1": 1 }
    }).map(function (el) {
        el._id = el._id.toString('hex', 3)  // NOTE this line
        return el
    });
    console.log(output);
}

输出是:

{
  _id: '674ada0e228929d8e45a7aa2e53bd68d',
  field1: 'string1'
}
{
  _id: '6b4c47f2eaaeb8ac306ec45ce0b820bc',
  field1: 'string2'
}
© www.soinside.com 2019 - 2024. All rights reserved.