如何通过数组中的位置/索引查找文档?

时间:2017-02-07 15:21:05

标签: node.js mongodb mongoose mongodb-query mongoose-schema

我需要检索让我们使用Mongoose在MongoDB数据库中说明位置1,5和8的文档。 是否可以根据其在集合中的位置获取文档?如果是这样,你能说明怎么做吗?

我需要这样的东西:

var someDocs = MyModel.find({<collectionIndex>: [1, 5, 8]}, function(err, docs) {

    //do something with the three documents

})

我尝试执行以下操作以查看在集合中使用了哪些索引,但是我得到了&#39; getIndexes不是函数&#39;错误:

var indexes = MyModel.getIndexes();

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

例如,如果按位置5表示您的集合中的第5个元素,那么这不是最好的方法。 Mongo集合通常按插入元素的顺序排列,但可能并非总是如此。请在此处查看答案并查看natural order上的文档:https://stackoverflow.com/a/33018164/7531267

在您的情况下,您可以在每个记录上查找唯一的id。 假设你提到的[1,5,8]是id s,这样的事情就应该这样做:

var someDocs = MyModel.find({ $or: [{ id: 1 }, { id: 5 }, { id: 8 }]}}, function(err, cb) {
    //do something with the three documents
})

您还可以阅读$in来替换$or并稍微清理一下查询。

答案 1 :(得分:0)

假设您在用户集合中包含此文档:

{
  _id: ObjectId('...'),
  name: 'wrq',
  friends: ['A', 'B', 'C']
}

以下代码搜索用户&#39; wrq&#39;

的第一个和第三个朋友
db.users.aggregate(
  [
    {
      $match: {
        name: 'wrq'
      }
    },
    {
      $project:{
        friend1: {
          $arrayElemAt: ["$friends", 0]
        },
        friend3: {
          $arrayElemAt: ["$friends", 2]
        }
      }
    }
  ]
)