如何避免在对象内部创建对象并使用猫鼬将元素直接推送到快速数组中?

Posted

技术标签:

【中文标题】如何避免在对象内部创建对象并使用猫鼬将元素直接推送到快速数组中?【英文标题】:How to avoid creating object inside object and push the elements directly into an array in express using mongoose? 【发布时间】:2020-12-26 11:59:38 【问题描述】:

filesArray 是对象数组,表示包含所有文件上传数据,如路径、文件名等。所以我只是获取路径和文件名并将其推送到另一个名为 Bigpaths2 的数组中。因此,当我将 Bigpaths2 推送到 Addtasks 数组的数组 Bigpaths4clients 时,它会成功推送,但是通过在 Bigpaths4clients 内创建另一个数组,然后以对象的形式推送。

但我不希望那样。我想阻止创建该数组。我只想将Bigpaths2 中的所有路径对象直接推入Bigpaths4clients 数组中,创建单个对象。我最后还附上了一张图片来得出我不想要的结论。检查json格式也谢谢!

var Bigpaths2 = [], paths;
    
filesArray.forEach(element => 
    paths = 
          "path": element.path,
          "name": element.filename
    ;
    
    Bigpaths2.push(paths);
)

User.findOneAndUpdate(
     'Addtasks.commonID':cid , 
     $push:  'Addtasks.$.Bigpaths4Clients': Bigpaths2  ,
    function (error, WriterData) 
        if (error) 
            console.log(error);
         
        else
        
            console.log("success");
        
    
)

用户架构:

[
    
        "assignee" : "Charlotte Miles",
        "displayLock" : "none",
        "displayDelete" : "inline",
        "commonID" : "x0yosfn1uz",
        "status" : "Approved by Admin",
        "Date" : "Fri Sep 04 2020 15:36:11 GMT+0530 (India Standard Time)",
        "exampleRadios" : "option1",
        "otherdetails" : "haha great!",
        "website" : "asad.com",
        "keywords" : "article importance, article generation, article quality",
        "words" : 12345,
        "topic" : "How article is generated?",
        "_id" : ObjectId("5f5211b29dc68d04244a6774"),
        "Bigpaths4Clients" : [ 
            [ 
                
                    "name" : "api-ms-win-core-errorhandling-l1-1-0.dll",
                    "path" : "public\\files\\api-ms-win-core-errorhandling-l1-1-0.dll"
                
            ]
        ],
        "Bigpaths" : [ 
            
                "path" : "public\\files\\api-ms-win-core-errorhandling-l1-1-0.dll",
                "name" : "api-ms-win-core-errorhandling-l1-1-0.dll"
            
        ]
    
]

【问题讨论】:

【参考方案1】:
User.findOneAndUpdate(
     'Addtasks.commonID':cid , 
     $push:  'Addtasks.$.Bigpaths4Clients':  $each: Bigpaths2   ,
    function (error, WriterData) 
        if (error) 
            console.log(error);
         
        else
        
            console.log("success");
        
    
)

$each operator is used to append multiple values to the array field。 在您的情况下,MongoDB 考虑了整个Bigpaths2 array as a single element to append to Bigpaths4Clients array

这是官方停靠链接https://docs.mongodb.com/manual/reference/operator/update/push/#append-multiple-values-to-an-array

【讨论】:

以上是关于如何避免在对象内部创建对象并使用猫鼬将元素直接推送到快速数组中?的主要内容,如果未能解决你的问题,请参考以下文章

如何让猫鼬将一组 url 推送到数组子文档

如何使用猫鼬将嵌入文档默认为空

获取子文档猫鼬的新创建/推送元素的值

猫鼬在循环中获取多个对象

如何使用对象数组创建猫鼬模式

NestJS如何在单元测试中创建新的猫鼬模型?