MongoDB:仅在不存在时创建字段

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

我想在这些数据上创建一个更新脚本:

{
"_id" : ObjectId("5b87e83d881ba01dfc3b0367"),
"Views" : [
    {
        "ReportUniqueKey" : "AAA",
        "GroupMode" : NumberInt("0"),
        "DisplayName" : "Default",
        "Columns" : [],
        "UnusedOptionalFilterParameter" : null,
        "IsDefault" : true,
        "LastModified" : ISODate("0001-01-01T01:00:00.000+01:00"),
        "LastModifiedUserId" : NumberInt("0"),
        "Guid": "6988FBD83E5A4C889E8E96646033D836"
    },
    {
        "ReportUniqueKey" : "9E91595D92DE4E01B72895B1B88C474D",
        "GroupMode" : NumberInt("0"),
        "DisplayName" : "Pro Tour",
        "Columns" : [],
        "UnusedOptionalFilterParameter" : null,
        "IsDefault" : false,
        "LastModified" : ISODate("2018-08-03T13:13:20.330+02:00"),
        "LastModifiedUserId" : NumberInt("1")
    }
]}

这只是一个文件,其中有更多。现在我想更新字段“Guid”不存在的所有视图对象或null /空字符串。如果Guid设置为Value,则不更新Field。

Guid由此函数生成:

function S4() {
return (((1+Math.random())*0x10000)|0).toString(16).substring(1);}
function generateGuid(){
return  (S4() + S4() + S4() + S4() + S4() + S4() + S4() + S4()).toUpperCase();}

如何为所有文档实现此更新?我在MongoDB网站上发现了这个,但我不知道如何进入数组。

db.TestGuid.aggregate([{$project:{Guid:{$ifNull: [ "$Guid", "Test"]}}}])

如何让这个脚本在一个对象数组上工作?

mongodb aggregate
1个回答
0
投票

我编写了一个c#脚本来执行此操作以生成更好的Guid。我用这个命令添加了Field:

var pipeline = new[] { new BsonDocument() { { "$addFields", new BsonDocument() { { "Views.Guid", "" } } } } };

然后我为MongoDriver加载所有文档,并为每个Document设置一个新的Guid。

我还在Columns字段中对元素进行排序,因此c#脚本对我来说更好。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.