MongoDB是否支持这样的查询?
例如我有这样的数据
> db.foo.find()
{ "_id" : 1, "x" : 1, "y" : 2, "z" : 3 }
{ "_id" : 2, "y" : 2, "x" : 1, "z" : 3 }
{ "_id" : 3, "z" : 3, "y" : 2, "x" : 1 }
现在我想在字段y
之前查询哪个字段x
,即最后两个记录。
MongoDB是否支持它?
答案 0 :(得分:1)
您可以使用以下聚合:
db.foo.aggregate([
{
$addFields: {
keys: {
$map: {
input: { $objectToArray: "$$ROOT" },
as: "item",
in: "$$item.k"
}
}
}
},
{
$match: {
$expr: { $lt: [ { $indexOfArray: [ "$keys", "y" ] } , { $indexOfArray: [ "$keys", "x" ] } ] }
}
},
{
$project: {
keys: 0
}
}
])
$objectToArray可以将您的根文档转换为键值对数组。然后,您可以使用$indexOfArray获取x
和y
键的位置,并使用$expr进行比较。
您需要注意的两件事(基于此page):