如何在Mongodb中检查Array元素的顺序



在MongoDB中,有什么简单的方法可以检查Array中元素的顺序吗?例如,我有一个这样的文档:

{
    _id: 1,
    tags: ["mongodb", "rethinkdb", "couchbase", "others"]
}

我想检查标记字段中mongodb是否在rethinkdb之前(让我们在数组元素中看到,mongodb=0,rethinkdb=1 index,所以mongodb在第一位,我们的大小写匹配。)?但如果有另一个文档(如下)rethinkdb位于mongodb之前,则It大小写不匹配。

{
  _id: 2,
  tags: ["rethinkdb", "mongodb", "couchbase"]
 }

这里mongodb(1)在rethinkdb(0)之后,所以我们的情况不匹配。

你的问题并不像你想象的那么清楚,因此为什么有几种方法可以回答它:

如果您只是想了解文档是否将"mongodb"作为数组的第一个元素,那么您只需发出这样的查询:

db.collection.find({ "tags.0": "mongodb" })

这将只返回使用"点表示法"在指定索引位置与给定值匹配的文档。

如果你真的希望匹配数组是否处于"预期顺序",那么你可以从聚合管道和设置可用的运算符以及MongoDB 2.6:中的其他功能中获得一些帮助

db.collection.aggregate([
    { "$project": {        
        "$_id": "$$ROOT",
        "matched": { "$setEquals": [ 
            "$tags", 
           ["mongodb", "rethinkdb", "couchbase", "others"]
        ]}
    }},
    { "$match": { "matched": true }}
])

或者,如果你想确保"mongodb"值在"rethinkdb"值之前,那么你需要使用mapReduce在JavaScript中进行评估,或者类似于$where运算符的不太好的东西:

db.collection.find({
    "$where": function() {
        return this.tags.indexOf("mongodb") < this.tags.indexOf("rethinkdb");
    }
})

相关内容

  • 没有找到相关文章

最新更新