提取数组的值并添加到同一个select mongoDB中

Posted

技术标签:

【中文标题】提取数组的值并添加到同一个select mongoDB中【英文标题】:Extract value of array and add in the same select mongoDB 【发布时间】:2021-10-30 10:00:57 【问题描述】:

我是 mongoDB 聚合的新手,我遇到了这种情况。我有这个 Json,我需要通过“选择”这个对象进行转换:


    "type": "PF",
    "code": 12345
    "Name": Darth Vader,
    "currency": "BRL",
    "status": "SINGLE",
    "adress": [
        
            "localization": "DEATH STAR",
            "createDate": 1627990848665
        ,
        
            "localization": "TATOOINE",
            "createDate": 1627990555665
        ,
    ]

这样:


    "type": "PF",
    "code": 12345
    "Name": Darth Vader,
    "currency": "BRL",
    "status": "SINGLE",
    "localization": "DEATH STAR",
    "createDate": 1627990848665
,

    "type": "PF",
    "code": 12345
    "Name": Darth Vader,
    "currency": "BRL",
    "status": "SINGLE",
    "localization": "TATOOINE",
    "createDate": 1627990555665

所以,在我的查询完成后,我将有 02 个对象而不是 01。我该怎么做? 我想通过 select 执行此操作,因为转换后我将按 createDate 排序并限制返回 API 的记录数。我在我的项目中使用标准。

【问题讨论】:

这能回答你的问题吗? Retrieve only the queried element in an object array in MongoDB collection 不幸的是没有,因为我需要向其他人重复第一个元素的相同信息。 =( 请提供足够的代码,以便其他人更好地理解或重现问题。 【参考方案1】:

执行此操作的方法是$unwind,这将为数组的每个成员制作一份文档副本。

Test code here

db.collection.aggregate([
  
    "$unwind": 
      "path": "$user.adress"
    
  ,
  
    "$set": 
      "user": 
        "$mergeObjects": [
          "$user",
          "$user.adress"
        ]
      
    
  ,
  
    "$unset": [
      "user.adress"
    ]
  ,
  
    "$sort": 
      "createDate": 1
    
  ,
  
    "$limit": 10
  
])

Edit1(上面是如果user是一个字段,如果是集合的名字)

$$ROOT 是一个系统变量,具有所有文档的值

Test code here

查询

db.collection.aggregate([
  
    "$unwind": 
      "path": "$adress"
    
  ,
  
    "$replaceRoot": 
      "newRoot": 
        "$mergeObjects": [
          "$$ROOT",
          "$adress"
        ]
      
    
  ,
  
    "$unset": [
      "adress"
    ]
  ,
  
    "$sort": 
      "createDate": 1
    
  ,
  
    "$limit": 10
  
])

【讨论】:

我只有一个问题。我正在查看我的 json,但我犯了一个错误……我没有名字 USER。在这种情况下我该怎么办?只有这样... "type": "PF", "code": 12345 "Name": Darth Vader, "currency": "BRL", "status": "SINGLE", "adress": [ "本地化”:“死亡之星”,“createDate”:1627990848665 ,“本地化”:“TATOOINE”,“createDate”:1627990555665 ,] 我有点想知道,如果用户是一个字段或集合的名称,请尝试编辑,我想你会没事的。 是的...这正是我所需要的!再次感谢你)!! =) 我记得另一种情况......我在 Json 中有实际位置,我需要保留实际位置并回复“孩子”的其他信息,因为你给我看。在这种情况下,我如何保留实际位置并为退货添加“孩子”..???? mongoplayground.net/p/W4hBM0KN1UDmongoplayground.net/p/W4hBM0KN1UD 我有点困惑,如果它的不同问题可能会问新问题,新数据和你想要的预期输出。所以人们可以提供帮助。

以上是关于提取数组的值并添加到同一个select mongoDB中的主要内容,如果未能解决你的问题,请参考以下文章

协助表格添加行中的值并使用按钮删除它们。使用 jQuery

通过 JS 获取 Select 选项值并设置数组索引

在swift中从数组中提取值

循环获取数据库中的值并赋值给数组

合并数组的值并对重复值求和

从 MySQL JSON 列中提取 JSON 对象的值作为数组