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”。最初的示例有点误导,我已经对其进行了更新。在提供任何其他输入之前,我是否可以在此建议,您“认为”您需要了解文档索引的目的是什么?似乎你“认为”你需要它的原因实际上并不适用,而且会有另一种方法来解决你认为你正在解决的问题。有很多方法,但没有一种是聪明的。好吧,那真的需要一些解释。实际上我在设计一个排名表。正在排序的文档不会更改。当然,我可以做一个
计数
来获得某人的排名。但是由于排名没有改变,我想我可以将排名列表保存在另一个集合中,作为一个带有嵌入式数组的文档。但在这种情况下,我如何获得某人的排名?我知道这正是数组中的偏移量。但是读取整个嵌入式阵列的方法有点难看。我在这里寻找一种优雅的方式。