假设我有很多像{'a':x,'b':y}这样的文档。 假设x和y是整数。 我该怎么做类似find().sort({'a'/'b'})
?如何对每个文档中两个字段的比率对MongoDB查询进行排序?
2
A
回答
2
您可以添加第三个字段,a/b的结果并按它排序。
您的文档将看起来像:
{'a' : x , 'b' : y, c : z} // z = x/y
,你会被“C”进行排序:
find().sort({c : 1})
2
我不相信这是可能的,因为你也不能运行比较2个字段的查询(不使用$ where来指定一个JavaScript函数,这将会很慢)。相反,我怀疑你还需要在文档中分别存储比例,然后在新的字段上进行排序。
0
就像Bugai13说,你需要一个需要的第三个属性的集合,以便进行排序。您可以通过调用mapReduce来添加ratio属性(如下所示),但这对大型集合来说不会非常快 - 并且会在运行时锁定数据库。你真的应该手动保持比率属性是最新的 - 它不应该很难。
db.data.insert({a: 1, b: 1});
db.data.insert({a: 2, b: 2});
db.data.insert({a: 3, b: 3});
db.data.insert({a: 1, b: 4});
db.data.insert({a: 2, b: 1});
db.data.insert({a: 3, b: 2});
db.data.insert({a: 1, b: 3});
db.data.insert({a: 2, b: 4});
db.data.insert({a: 3, b: 1});
db.data.insert({a: 1, b: 2});
db.data.insert({a: 2, b: 3});
db.data.insert({a: 3, b: 4});
db.data.mapReduce(
function(){
emit(this._id, this);
},
function(k, vs){
v = vs[0];
v.c = v.a/v.b;
return v;
},
{out : 'data'}
);
db.data.find().sort({c:1});
相关问题
- 1. MongoDB - 对查询进行两次排序?
- 2. awk对两个字段进行排序:
- 3. 如何对数组字段中的子文档进行排序?
- 4. 如何对DataTable进行分组并按字段对每个组进行排序?
- 5. 如何根据Java中的比率对两个数组进行排序?
- 6. Python:如何通过两个字段对数组进行排序?
- 7. 如何对多个查询中的多个列进行排序?
- 8. 按常用字段对多个Mysql查询进行排序
- 9. 如何根据子文档对mongodb查询结果进行排序
- 10. 如何对数字中的每个数值进行排序?
- 11. 如何按照在MongoDB中的值对字段中的对象进行排序?
- 12. MongoDB查找子文档并对结果进行排序
- 13. 如何在cakePHP中对数组中的两个字段进行排序?
- 14. 如何使用比较器对集合中的多个字段进行排序?
- 15. 如何编写查询查询来比较Express和MongoDB中的两个字段?
- 16. 如何对查询进行排序?
- 17. 如何使用-number postfix对MongoDB查询进行排序?
- 18. 使用LINQ对列表中每个对象的字段进行排序
- 19. 如何使用mongoDB对泰国字段进行排序
- 20. 如何对mongodb ObjectId字段进行正则表达式查询
- 21. 如何对多个查询的结果进行排序?
- 22. 在Java中比较两个对象..每个对象都有两个字段
- 23. 基于MATLAB中的两个字段对.mat格式文件进行排序
- 24. MongoDb $查询查询与对象数组中的多个字段
- 25. MongoDB:查询字段大于另一个字段的文档
- 26. 如何对源代码文档中的字段和方法进行排序?
- 27. 如何对每个数字进行排序(java)
- 28. 如何对可能未在每个文档上设置的字段进行排序
- 29. 对mongodb中的字段数组进行排序
- 30. 如何按字段排序我的查询,然后按db2中该字段的子集对它进行排序?
是否有任何方式定义此字段的方式,每次x或y递增,字段c更新它的值? – 2011-02-24 21:01:10
不,没有其他的方法(除了@AdaTheDev所说的JavaScript函数,这将工作缓慢)。您可以在一个操作中增加和更新。 – 2011-02-24 21:02:55