如何按MongoDB中的值对字段中的对象进行排序?

时间:2016-04-30 20:15:10

标签: mongodb mongodb-java

如果我有这样的文件

{
    "_id" : "word",
    "nextWords" : {
        "x" : 3,
        "y" : 2,
        "z" : 1,
        "h" : 1,
        "n" : 10
    }
}

我希望以“降序”的形式返回“nextWords”中的对象。

我可以在MongoDB Shell或Java中执行此操作吗?

编辑:我希望“nextWords”根据其值按降序排序,因此预期输出为:

{
    "n" : 10
    "x" : 3,
    "y" : 2,
    "z" : 1,
    "h" : 1,
}

2 个答案:

答案 0 :(得分:0)

JSON对象没有订单。来自the specs第4.3.3节:

  

对象是Object类型的成员。它是一个无序的属性集合,每个属性   包含原始值,对象或函数。存储在对象属性中的函数称为a   方法

您不能依赖字段的顺序,但不能保证。

答案 1 :(得分:-1)

你可以这样做,如下

{“_ id”:“word”,“nextWords”:[{“word”:“x”,“count”:3},....]}

使用此地图缩小:

MapReduceCommand cmd = new MapReduceCommand(collection, map, reduce, null, MapReduceCommand.OutputType.INLINE, null);

MapReduceOutput out = collection.mapReduce(cmd);

for (DBObject o : out.results()) {
       // here put them in an array 
    }

在java中运行它:

import cv2
import numpy as np
import math
img = cv2.imread('bone2.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,100,400,apertureSize =3)
cv2.imshow('canny',edges)
kernel=np.ones((5,5),np.uint8)
boneEdges=cv2.morphologyEx(edges,cv2.MORPH_GRADIENT,kernel)
minLineLength =1000
maxLineGap = 10
lines = cv2.HoughLinesP(boneEdges,1,np.pi/180,100,minLineLength,maxLineGap)

for x1,y1,x2,y2 in lines[0]:
 cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2)
 slope=(y2-y1),(x2-x1)
 # print('slope',arctan(slope))
cv2.imwrite('houghlines5.jpg',img)
cv2.waitKey(0)

//对数组进行排序