这个问题是基于表现的。
如果我有一个我想在多个字段上查询的集合(fieldValue< x< fieldValue,status =' pending' etc ...),最好通过mongoDB查询查询或而是检索适合某些更简单查询的集合样本,例如status =' pending'然后进一步过滤服务器代码中的数据?
您何时会推荐哪种方法?何时不推荐?
感谢您抽出宝贵时间。
此致 埃米尔
答案 0 :(得分:0)
转到单个查询选项,因为过滤大部分不需要的数据并从数据库中获取所需数据应该在数据库本身中完成。任何其他操作都将花费自己的时间和资源来完成相同的工作。在这种情况下,我们可以使用$and,$gt,$lt,$eq。如果数据在数据层本身运行,性能将会很高。
样本集
{ "_id" : ObjectId("5a13c7e08e1b021d0f556c29"), "value" : 10, "status" : "pending" }
{ "_id" : ObjectId("5a13c7e58e1b021d0f556c2a"), "value" : 20, "status" : "completed" }
{ "_id" : ObjectId("5a13c7e88e1b021d0f556c2b"), "value" : 40, "status" : "In Progress" }
{ "_id" : ObjectId("5a13c7ec8e1b021d0f556c2c"), "value" : 50, "status" : "pending" }
{ "_id" : ObjectId("5a13c7f08e1b021d0f556c2d"), "value" : 750, "status" : "completed" }
{ "_id" : ObjectId("5a13c7f68e1b021d0f556c2e"), "value" : 90, "status" : "pending" }
{ "_id" : ObjectId("5a13c7fb8e1b021d0f556c2f"), "value" : 190, "status" : "pending" }
{ "_id" : ObjectId("5a13c7fe8e1b021d0f556c30"), "value" : 120, "status" : "completed" }
{ "_id" : ObjectId("5a13c8038e1b021d0f556c31"), "value" : 220, "status" : "completed" }
{ "_id" : ObjectId("5a13c8078e1b021d0f556c32"), "value" : 720, "status" : "pending" }
{ "_id" : ObjectId("5a13c80b8e1b021d0f556c33"), "value" : 7420, "status" : "In Progress" }
示例查询:20< x< 300和状态=待定
db.collection.find({$and:[{value:{$gt: 20}, value:{$lt:300}, status:{$eq:"pending"}}]})
结果将是
{ "_id" : ObjectId("5a13c7e08e1b021d0f556c29"), "value" : 10, "status" : "pending" }
{ "_id" : ObjectId("5a13c7ec8e1b021d0f556c2c"), "value" : 50, "status" : "pending" }
{ "_id" : ObjectId("5a13c7f68e1b021d0f556c2e"), "value" : 90, "status" : "pending" }
{ "_id" : ObjectId("5a13c7fb8e1b021d0f556c2f"), "value" : 190, "status" : "pending" }
希望它有所帮助!