在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");
}
})