Morphia和$ sort运算符

时间:2014-07-18 17:14:43

标签: mongodb morphia

我有一个包含这样文件的集合:

book {
  title: "hello world",
  chapters: [
    {
      number: "2",
      title: "foo2"
    },{
      number: "1",
      title: "foo1"
    }
  ]
}

我需要以下选项之一:

  1. 获取文档的查询具有按章节排序的章节数组。编号

  2. 一个保存操作,在推送文档之前对数组进行排序(但是通过委托给mongodb)

  3. 我在官方mongodb文档中看到了 $ sort 操作,但我不知道如何在Morphia中使用它。 http://docs.mongodb.org/manual/reference/operator/update/sort/

    输出应为:

    预订{       标题:"你好世界",       章节:[         的 {           号码:" 1",           标题:" foo1"         },         {           号码:" 2",           标题:" foo2"         }       ]     }

2 个答案:

答案 0 :(得分:0)

你不能像那样对子文档进行排序。您可以对结果进行排序,否则,如here所示。

答案 1 :(得分:0)

根据Mongo $sort Manual

解决方案1:

如果您的收藏是"预订"你可以试试这样的地方:

db.book.update( {title: "hello word"},
                { $push: {
                            chapters:{
                                        $each:[],
                                        $sort: {number:1}                                            
                                    }
                        }
                })

测试:

创建文档:

db.book.insert({
    title: "hello world",
    chapters: [
        {
          number: "2",
          title: "foo2"
        },{
          number: "1",
          title: "foo1"
        }
    ]
})

检查:

db.book.find().pretty()

按编号对章节进行排序:

db.book.update( {title: "hello world"},
                { $push: {
                            chapters:{
                                        $each:[],
                                        $sort: {number:1}                                            
                                    }
                        }
                })

再次检查:

db.book.find().pretty()

解决方案2:

否则,如果你真的有任何收集的文件" book"嵌入式,这是解决方案:

db.yourcollection.update( {"book.title": "hello world"},
            { $push: {
                        "book.chapters":{
                                    $each:[],
                                    $sort: {number:1}                                            
                                }
                    }
            })

测试:

创建文档:

db.yourcollection.insert({book:{
    title: "hello world",
    chapters: [
      {
        number: "2",
        title: "foo2"
      },{
        number: "1",
        title: "foo1"
      }
    ]
}})

检查:

db.book.find().pretty()

按编号对章节进行排序:

db.yourcollection.update( {"book.title": "hello world"},
            { $push: {
                        "book.chapters":{
                                    $each:[],
                                    $sort: {number:1}                                            
                                }
                    }
            })

再次检查:

db.book.find().pretty()