在MongoDB上,当我们有"草稿"(是/否),"已发布"(是/否)等字段时,这是最好的策略吗?在所有记录中创建字段并输入"是"/"否"值或将字段放在哪里?
posts: [{_id:1, text:"hello", draft:true},{_id:2 text:"world", draft:false}]
Run Code Online (Sandbox Code Playgroud)
要么
posts: [{_id:1, text:"hello", draft:true},{_id:2 text:"world"}]
Run Code Online (Sandbox Code Playgroud)
哪个更快?它适用于大量数据.
最好的问候,João
Rob*_*tam 10
更快的是什么?当值为false时省略该字段将导致文档略小,这可能导致整体速度略有提高.
但是省略该字段会使查询错误变得更加困难,特别是如果您混合使用省略字段和显式错误值.
注意这个样本集合返回的不同查询:
> db.test.find()
{ "_id" : ObjectId("500eeb7c42d87d5d861e1219") }
{ "_id" : ObjectId("500eeb8242d87d5d861e121a"), "b" : false }
{ "_id" : ObjectId("500eeb8642d87d5d861e121b"), "b" : true }
>
> db.test.find({b:true})
{ "_id" : ObjectId("500eeb8642d87d5d861e121b"), "b" : true }
>
> db.test.find({b:false})
{ "_id" : ObjectId("500eeb8242d87d5d861e121a"), "b" : false }
>
> db.test.find({b:{$exists:false}})
{ "_id" : ObjectId("500eeb7c42d87d5d861e1219") }
>
> db.test.find({$or:[{b:false},{b:{$exists:false}}]})
{ "_id" : ObjectId("500eeb7c42d87d5d861e1219") }
{ "_id" : ObjectId("500eeb8242d87d5d861e121a"), "b" : false }
>
Run Code Online (Sandbox Code Playgroud)
请注意,如果混合使用省略和显式错误值,则必须编写的查询更复杂,并且可能导致查询执行速度变慢.
| 归档时间: |
|
| 查看次数: |
12167 次 |
| 最近记录: |