那么,我有一个像这样的对象数组:
"coordinates":[
{
"action":"charge",
"position":{
"city":"City A"
}
},
{
"action":"charge",
"position":{
"city":"City B"
}
},
{
"action":"discharge",
"position":{
"city":"City C"
}
},
{
"action":"discharge",
"position":{
"city":"City D"
}
},
(...)
]
这个数组有N个对象,所以我不知道数组中对象的总数
我的问题是:如何从坐标数组的对象位置查询第一个和最后一个城市?我是这样做的:
db.find({
'coordinates.0.position.city': city_first_name,
'coordinates.position': {'$elemMatch': {'city': city_last_name}
},
{
'coordinates.$.position': {'$slice': -1}})
})
但是效果并不好。它会获取第一个位置,但会获取任何对象的任何部分中的任何元素。我应该使用聚合还是有其他方法使用find?
谢谢你的帮助。
db.collection.aggregate([
{
"$project": {
"f": {
"$slice": [//Firsgt
"$a",
1
]
},
"l": {
"$slice": [//Last
"$a",
-1
]
}
}
}
])
您可以使用$slice
与$project
游乐场