MongoDB find()命令子对象
我知道在对集合执行find()时可以使用$orderBy。但是我的集合包含其他对象,如何对这些对象进行排序?例如:MongoDB find()命令子对象,mongodb,Mongodb,我知道在对集合执行find()时可以使用$orderBy。但是我的集合包含其他对象,如何对这些对象进行排序?例如: books: [{ title: 'book 1', authors: [ { name: 'jim' }, { name: 'bob' }, ] }, { title: 'book 2', authors: [ { name: 'steve' }, { name: 'joe' }, ] }]; 我想做db.coll
books: [{
title: 'book 1',
authors: [
{ name: 'jim' },
{ name: 'bob' },
]
}, {
title: 'book 2',
authors: [
{ name: 'steve' },
{ name: 'joe' },
]
}];
我想做db.collections.find();让它把所有的书按顺序归还(我知道如何使用$orderBy进行排序,但我也希望对作者进行排序。我不完全确定您需要什么。MongoDB返回完整的文档,因此所有书籍的作者列表必须在客户端或使用进行编译。不能使用简单的查询进行排序,因为排序操作之前需要投影 此外,您可能希望有一个不同的作者列表,否则一些作者会在列表中出现几十次 使用聚合框架,您可以执行以下操作:
db.books.aggregate(
{"$unwind" : "$authors"}, // unwind the array
{$group : {"_id" : "$authors.name"} }, // distinct
{$sort : {"_id" : 1}}); // the actual sort
我不完全确定您需要什么。MongoDB返回完整的文档,因此所有书籍的作者列表必须在客户端或使用进行编译。不能使用简单的查询来完成,因为它需要在排序操作之前进行投影 此外,您可能希望有一个不同的作者列表,否则一些作者会在列表中出现几十次 使用聚合框架,您可以执行以下操作:
db.books.aggregate(
{"$unwind" : "$authors"}, // unwind the array
{$group : {"_id" : "$authors.name"} }, // distinct
{$sort : {"_id" : 1}}); // the actual sort
我不完全确定您需要什么。MongoDB返回完整的文档,因此所有书籍的作者列表必须在客户端或使用进行编译。不能使用简单的查询来完成,因为它需要在排序操作之前进行投影 此外,您可能希望有一个不同的作者列表,否则一些作者会在列表中出现几十次 使用聚合框架,您可以执行以下操作:
db.books.aggregate(
{"$unwind" : "$authors"}, // unwind the array
{$group : {"_id" : "$authors.name"} }, // distinct
{$sort : {"_id" : 1}}); // the actual sort
我不完全确定您需要什么。MongoDB返回完整的文档,因此所有书籍的作者列表必须在客户端或使用进行编译。不能使用简单的查询来完成,因为它需要在排序操作之前进行投影 此外,您可能希望有一个不同的作者列表,否则一些作者会在列表中出现几十次 使用聚合框架,您可以执行以下操作:
db.books.aggregate(
{"$unwind" : "$authors"}, // unwind the array
{$group : {"_id" : "$authors.name"} }, // distinct
{$sort : {"_id" : 1}}); // the actual sort
诀窍是在写入时而不是读取时对文档进行排序 如上所述,您要求MongoDB在文档到达您的应用程序之前对其进行修改。Mongo不喜欢在没有特定命令的情况下修改文档。这方面的主要选项有聚合、地图缩减和投影。这些都不适合您的问题:
- 聚合可能比您需要的更复杂,请参见此处的另一个选项
- MapReduce类似于聚合,但更复杂
- 可以筛选返回的字段,但没有排序选项
authors
数组上的数组更新运算符。存储的将保留顺序,因此检索文档时将对数组进行排序
这使得读取比使用聚合框架或map reduce更简单、更快。诀窍是在写入时而不是读取时对文档进行排序 如上所述,您要求MongoDB在文档到达您的应用程序之前对其进行修改。Mongo不喜欢在没有特定命令的情况下修改文档。这方面的主要选项有聚合、地图缩减和投影。这些都不适合您的问题:
- 聚合可能比您需要的更复杂,请参见此处的另一个选项
- MapReduce类似于聚合,但更复杂
- 可以筛选返回的字段,但没有排序选项
authors
数组上的数组更新运算符。存储的将保留顺序,因此检索文档时将对数组进行排序
这使得读取比使用聚合框架或map reduce更简单、更快。诀窍是在写入时而不是读取时对文档进行排序 如上所述,您要求MongoDB在文档到达您的应用程序之前对其进行修改。Mongo不喜欢在没有特定命令的情况下修改文档。这方面的主要选项有聚合、地图缩减和投影。这些都不适合您的问题:
- 聚合可能比您需要的更复杂,请参见此处的另一个选项
- MapReduce类似于聚合,但更复杂
- 可以筛选返回的字段,但没有排序选项
authors
数组上的数组更新运算符。存储的将保留顺序,因此检索文档时将对数组进行排序
这使得读取比使用聚合框架或map reduce更简单、更快。诀窍是在写入时而不是读取时对文档进行排序 如上所述,您要求MongoDB在文档到达您的应用程序之前对其进行修改。Mongo不喜欢在没有特定命令的情况下修改文档。这方面的主要选项有聚合、地图缩减和投影。这些都不适合您的问题:
- 聚合可能比您需要的更复杂,请参见此处的另一个选项
- MapReduce类似于聚合,但更复杂
- 可以筛选返回的字段,但没有排序选项
au上的数组更新运算符