执行find()查询后,我的结果如下。
{
"_id" : ObjectId("5384928a03ea2e75268b4567"),
"0" : {
"name" : "mango",
"quantity" : "10"
},
"1" : {
"name" : "apple",
"quantity" : "14"
},
"2" : {
"name" : "banana",
"quantity" : "11"
},
"3" : {
"name" : "grapes",
"quantity" : "19"
},
"4" : {
"name" : "lichi",
"quantity" : "13"
},
"5" : {
"name" : "orange",
"quantity" : "10"
},
"6" : {
"name" : "lemon",
"quantity" : "10"
},
"7" : {
"name" : "pear",
"quantity" : "10"
},
"8" : {
"name" : "cherry",
"quantity" : "10"
},
"9" : {
"name" : "kiwi",
"quantity" : "10"
}
}
现在我只想要结果中的任何五个元素(例如从第2个元素到第6个元素)。
如何使用$ slice执行此操作或是否有任何其他方法只能检索结果中的五个元素?
答案 0 :(得分:1)
这里重要的是,你实际上有一个$slice
数组可以工作吗?对于使用PHP的人来说,这似乎有点误解,因为语言通常代表一个数组。
mongo shell(例如)将显示明显的区别,其中数组在其JSON表示中实际上看起来像这样:
{
"_id" : ObjectId("5384928a03ea2e75268b4567"),
"arrayField": [
{
"name" : "mango",
"quantity" : "10"
},
{
"name" : "apple",
"quantity" : "14"
},
{
"name" : "banana",
"quantity" : "11"
},
{
"name" : "grapes",
"quantity" : "19"
}
]
}
该结构可以使用$slice
运算符返回所需的元素。这里的例子是索引位置1的2个文件
db.collection.find({},{ "arrayField": { "$slice": [ 1,2] }})
{
"_id" : ObjectId("5384928a03ea2e75268b4567"),
"arrayField" : [
{ "name" : "apple", "quantity" : "14" },
{ "name" : "banana", "quantity" : "11" }
]
}
您展示的结构只是顶级文档中子文档的一组关键名称。这可能是一个错误,但您只需在投影中指定这些字段。它不是数组,因此$slice
不适用:
db.collection.find({}, { "1": 1, "2": 1, "3": 1, "4": 1, "5": 1, "6": 1 })
但这可能不是您想要的,所以看起来您需要修复数据,因此它是一个数组。
答案 1 :(得分:0)
$ slice用于控制查询返回的数组中的元素数,但我没有在结果中看到显式数组。您的文档应如下所示:
{
"_id" : ObjectId("5384928a03ea2e75268b4567"),
"fruit" : [
{
"name" : "mango",
"quantity" : "10"
},
{
"name" : "apple",
"quantity" : "14"
}
]
}
然后你可以用以下内容查询它: db.collection.find({},{“fruit”:{$ slice:[1:6]}})
答案 2 :(得分:0)
如果你想从文档中只获得5条记录,你可以使用limit(),如果你想跳过一些记录,那么使用skip()。
例如:
db.collection.find()跳过(2).limit(5);
此查询在前两个文档之后获取5个文档。