2014-02-05 79 views
0

H有带数组的json文档。因为我不能用push或addtoset添加到数组的开头,所以我需要对数组进行排序。示例在Mongo中对数组进行排序

{ 
    "Component": [ 
    { 
     "Id": "PDP-1", 
     "Links": {"Link": [ 
      { 
      "Text": "Western Division", 
      "Url": "/1x7-en70ai/last-minute-holidays-western-division", 
      "Title": "Last minute holidays Western Division" 
      }, 
      { 
      "Text": "Browse Regions ", 
      "Url": "/1x7-en6uly-10ts/last-minute-holidays-gambia/regions", 
      "Title": "Last minute holidays Gambia", 
      "Style": "BrowseForMore" 
      }, 
      { 
      "Text": "City of Banjul", 
      "Url": "/1x6-en6vq7/holidays-city-of-banjul", 
      "Title": "City of Banjul Holidays" 
      }, 
      { 
      "Text": "Western Division", 
      "Url": "/1x6-en70ai/holidays-western-division", 
      "Title": "Western Division Holidays" 
      } 
     ]}, 
     "Title": "Regions", 
     "Type": "PDP" 
    }, 
    { 
     "Id": "PDP-2", 
     "Links": {"Link": [ 
      { 
      "Text": "Bijilo", 
      "Url": "/1x7-enbmy6/last-minute-holidays-bijilo", 
      "Title": "Last minute holidays Bijilo" 
      }, 
      { 
      "Text": "Browse Cities ", 
      "Url": "/1x7-en6uly-10tt/last-minute-holidays-gambia/cities", 
      "Title": "Last minute holidays Gambia", 
      "Style": "BrowseForMore" 
      }, 
      { 
      "Text": "Banjul Beach", 
      "Url": "/1x6-enakgm/holidays-banjul-beach", 
      "Title": "Banjul Beach Holidays" 
      }, 
      { 
      "Text": "Bijilo", 
      "Url": "/1x6-enbmy6/holidays-bijilo", 
      "Title": "Bijilo Holidays" 
      }, 
      { 
      "Text": "Brufut Heights", 
      "Url": "/1x6-encok8/holidays-brufut-heights", 
      "Title": "Brufut Heights Holidays" 
      }, 
      { 
      "Text": "Kololi", 
      "Url": "/1x6-enpnle/holidays-kololi", 
      "Title": "Kololi Holidays" 
      }, 
      { 
      "Text": "Kotu", 
      "Url": "/1x6-enq067/holidays-kotu", 
      "Title": "Kotu Holidays" 
      } 
     ]}, 
     "Title": "Cities", 
     "Type": "PDP" 
    } 
    ], 
    "Id": "118431", 
    "Template": { 
    "PageTemplate": { 
     "Code": "2B2", 
     "text": "041 - TEMP2 - COP_CONCOU_{LAST MINUTE}" 
    }, 
    "Category": { 
     "Code": "1X7", 
     "Type": "Product", 
     "text": "Last minute holidays" 
    }, 
    "GeoObject": { 
     "Code": "EN6ULY", 
     "text": "Gambia, The" 
    }, 
    "GeoObjectType": { 
     "Code": "1A", 
     "text": "Political" 
    }, 
    "GeoObjectSubType": { 
     "Code": "10TR", 
     "text": "Country" 
    } 
    }, 
    "Type": "Content", 
    "Url": "/1x7-en6uly/last-minute-holidays-gambia", 
    "_id": {"$oid": "528492d4c90fa9fcd0436929"} 
} 

我想在Links.Link'BrowseForMore'中按Style排序。任何想法如何做到这一点?我想我可以通过push添加虚拟数组,然后按照我想要的方式进行分类。任何帮助表示赞赏

+2

如果您对代码进行格式化,则回答起来会更容易。格式化为 –

+0

。希望更好地获得 – PaulManningBiz

+0

你是什么意思“按Links.Link'BrowseForMore'中的样式排序”? – JohnnyHK

回答

1

您似乎想要更新数组并保持排序顺序与列表前面的Links.Link.Style值。在这种情况下,使用带更新的$sort修饰符。

db.collection.update(
    { _id: id }, 
    { $push: { "Links.Link: {$each: [doc], $sort { Style: -1 }}} } 
) 

$each要求操作员即使只有一个文件,但可以采取很多。

如果您尝试使用$addToSet来维护唯一的文档,官方的MongoDB行是被认为是无序的,因此修饰符在这里不可用。

+0

谢谢。我不知道如何在你的示例中替换[doc],因为有三个或四个字段,例如文本,网址,标题和样式。因此不应该是: – PaulManningBiz

+0

db.collection.update( {_id:id}, {$ push:{“Links”:{$ each:[Link],$ sort {Style:-1}}}} ) – PaulManningBiz

+0

在我的答案中,“可以带很多”,每个参数都是一个列表,在[]之间用逗号分隔值或变量(分别用'id'和'doc'的变量的占位符)。回答中的$ each操作符上的链接具有所有文档 –