Arrays 是否有方法使用嵌入式数组查询MongoDB集合以返回元素';数组中的偏移量
鉴于学校收藏中的以下文件:Arrays 是否有方法使用嵌入式数组查询MongoDB集合以返回元素';数组中的偏移量,arrays,mongodb,offset,Arrays,Mongodb,Offset,鉴于学校收藏中的以下文件: { _id: 1, zipcode: "63109", students: [ { name: "john", school: 102, age: 10 }, { name: "jess", school: 102, age: 11 }, { name: "jeff", school: 108, age: 15 } ] } { _id: 2, zipcode: "63110
{
_id: 1,
zipcode: "63109",
students: [
{ name: "john", school: 102, age: 10 },
{ name: "jess", school: 102, age: 11 },
{ name: "jeff", school: 108, age: 15 }
]
}
{
_id: 2,
zipcode: "63110",
students: [
{ name: "ajax", school: 100, age: 7 },
{ name: "achilles", school: 100, age: 8 },
]
}
{
_id: 3,
zipcode: "63109",
students: [
{ name: "ajax", school: 100, age: 7 },
{ name: "achilles", school: 100, age: 8 },
]
}
{
_id: 4,
zipcode: "63109",
students: [
{ name: "barney", school: 102, age: 7 },
{ name: "ruth", school: 102, age: 16 },
]
}
以下是MongoDB文档中的查询示例:
db.schools.find( { zipcode: "63109" },
{ students: { $elemMatch: { school: 108 } } } )
它将返回如下结果:
{ "_id" : 1, "students" : [ { "name" : "jeff", "school" : 108, "age" : 15 } ] }
{ "_id" : 1, "students" : [ { "name" : "jeff", "school" : 108, "age" : 15, "offset" : 2 } ] }
我的问题是如何得到这样的结果:
{ "_id" : 1, "students" : [ { "name" : "jeff", "school" : 108, "age" : 15 } ] }
{ "_id" : 1, "students" : [ { "name" : "jeff", "school" : 108, "age" : 15, "offset" : 2 } ] }
如您所见,此结果添加了字段偏移。以前有人试过吗?下面是解决您问题的方法:
db.schools.find( { zipcode: "63109" },
{ _id : 1 , students : 1 }).forEach( function(doc){
var arr = doc.students;
for( var index = 0 ; index < arr.length ; index++ )
{
if( arr[index].school == 108 )
{
var d = arr[index];
d["offset"] = index;
}
else
{
arr.splice(index, 1);
}
}
});
db.schools.find({zipcode:“63109”},
{{u id:1,学生:1}).forEach(函数(doc){
var arr=博士生;
对于(var指数=0;指数
数组是固定的,因此0
是第一个元素,1
是第二个元素。你不需要文档中的额外信息来告诉你这个职位。我知道它是固定的,但我希望它包含在结果中,所以我不需要计算它。事实上,我将使用“$elemMatch”和“$projection”。最初的示例有点误导,我已经对其进行了更新。在提供任何其他输入之前,我是否可以在此建议,您“认为”您需要了解文档索引的目的是什么?似乎你“认为”你需要它的原因实际上并不适用,而且会有另一种方法来解决你认为你正在解决的问题。有很多方法,但没有一种是聪明的。好吧,那真的需要一些解释。实际上我在设计一个排名表。正在排序的文档不会更改。当然,我可以做一个计数
来获得某人的排名。但是由于排名没有改变,我想我可以将排名列表保存在另一个集合中,作为一个带有嵌入式数组的文档。但在这种情况下,我如何获得某人的排名?我知道这正是数组中的偏移量。但是读取整个嵌入式阵列的方法有点难看。我在这里寻找一种优雅的方式。