【问题标题】:Ensuring that Collection._ensureIndex passes fields in the right order确保 Collection._ensureIndex 以正确的顺序传递字段
【发布时间】:2013-07-29 19:28:29
【问题描述】:

mongo 索引文档说对于复合索引,字段的顺序非常重要:索引只能支持使用字段的任何前缀的查询:http://docs.mongodb.org/manual/core/indexes/

Meteor 目前在服务器端以 Collection._ensureIndex 的形式传递到 MongoDB 的 ensureIndex

但是,在 Javascript 中将参数传递给 Collection._ensureIndex 时,这些字段会变成 Javascript 对象。我们是否可以保证 Mongo 会以相同的顺序阅读它们?如果不是,那么设置此索引的正确方法是什么?

这可能与 JS 对象的存储方式有关。它们是关联数组,还是按顺序保持其属性?

【问题讨论】:

    标签: javascript mongodb indexing meteor compound-index


    【解决方案1】:

    Javascript 没有指定对象上参数的顺序,但 V8 至少对 node.js 这样做了,参数始终按照它们添加到对象的顺序。

    如果你这样做了

    var a = {a:1, b:1, c:1}
    var keys = Object.keys(a)
    

    返回

    [ 'a', 'b', 'c' ]
    

    【讨论】:

    • 只是想注意'c', 'b', 'a' 也会以相同的顺序出现。并不是这里的键碰巧是按字母顺序排列的。
    【解决方案2】:

    不用担心,这应该可以正常工作。您也可以通过检查 MongoDB shell 上的哪些索引来轻松查看它是否有效:

    mongo yourdb
    db.collectionName.getIndexes();
    

    【讨论】:

    • 当然,我可以检查,但你能详细说明为什么它“应该可以正常工作”吗?
    • 因为否则您无法从 Node 中正确创建索引...我们会想出更好的 API ;-)
    猜你喜欢
    • 2022-08-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多