javascript - MongoDB 将字段和切片投影限制在一起

标签 javascript node.js mongodb mongoose mongodb-query

我有以下用户对象:

{
  "_id" : ObjectId("someId"),
  "name" : "Bob",
  "password" : "fakePassword",
  "follower" : [...],
  "following" : [..]
}

我需要对关注者列表进行分页,因此我使用切片投影运算符,但我只需要返回分页的关注者列表。我不知道我是否以错误的方式执行此操作,或者这无法完成,但限制字段不适用于切片投影。

以下是我尝试过的几个查询:

 collection.findOne(
          {
            _id: new ObjectId(userId)
          },
          {
            follower: {$slice:[skip, parseInt(pageSize)]},
            follower: 1
          },..

collection.findOne(
          {
            _id: new ObjectId(userId)
          },
          {
            follower: 1,
            follower: {$slice:[skip, parseInt(pageSize)]}
          },

但是这些返回对象中的所有值,并且不限制字段,尽管切片在这两种情况下都可以正常工作。 另外,当我执行类似 _id:0,following:0 的操作时,这部分有效,但我不想像这样提及查询中的每个字段,一旦我决定,它可能会产生问题更改架构。 我如何让它工作,查询的语法是什么才能让它工作..??

最佳答案

不确定我在这里是否了解您的使用模式。也许我们可以稍微简化一下这个例子。因此考虑该文档:

{
    "_id" : ObjectId("537dd763f95ddda3208798c5"),
    "name" : "Bob",
    "password" : "fakePassword",
    "follower" : [
            "A",
            "B",
            "C",
            "D",
            "E",
            "F",
            "G",
            "H",
            "I",
            "J",
            "K"
    ]
}

所以像这样的简单查询:

db.paging.find(
    { "name": "Bob" },
    { 
        "_id": 0, 
        "name": 0, 
        "password": 0, 
        "follower": { "$slice": [0,3] } 
}).pretty()

给出结果:

{
    "follower" : [
            "A",
            "B",
            "C"
    ]
}

与以下页面类似:

db.paging.find(
    { "name": "Bob" },
    { 
        "_id": 0, 
        "name": 0, 
        "password": 0, 
        "follower": { "$slice": [3,3] } 
}).pretty()

给出结果:

{ 
    "follower" : [ 
        "D", 
        "E", 
        "F" 
    ]
}

因此,就我个人而言,我不确定您是在询问字段排除还是在询问“分页”数组结果,但无论哪种方式,这两个示例都显示在此处。

关于javascript - MongoDB 将字段和切片投影限制在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23804254/

相关文章:

javascript - SQLite 选择语句

node.js - 使用MDB排查NodeJS内存泄漏,umem未加载到地址空间

javascript - 仅显示动态添加的选定元素值

javascript - 强制移动设备激活 :hover CSS properties on first touch and activate link on second touch

javascript - native react : react-navigation crashes when navigating with headerRight

Node.js child_process.fork() 在不同的 CPU 内核上运行

node.js - NPM 未知协议(protocol)

javascript - 使用 mongoose/MongoDB 中间件删除引用的文档(2021 年)

node.js - 如何在 Node.js 中使用变量创建 MongoDB 索引?

mongodb - 在 cl-mongo 中实现 MongoDB SASL 身份验证