【问题标题】:Mongodb $slice doesn't slice the dataMongodb $slice 不会对数据进行切片
【发布时间】:2019-01-07 16:16:45
【问题描述】:

当尝试对集合用户进行切片并将其记录到控制台时,由于某种原因,应该切片的字段没有。

var filteredUsers =
 users.find({},
    {
        "followers": { "$slice": -1 },
        "subscribers": { "$slice": -1 },
        "hour": { "$slice": -1 }
    }
 ).toArray();

filteredUsers.forEach(user => {
    console.log(user);
});

我使用的是 3.2 以上的 mongodb 版本,所以这应该不是问题。

日志输出:

{
 _id: 'fakeId',
 subscribers: [ 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0 ],
 followers: [ 1, null, 1, null, 1, 0, 1, 0, 1, 1, 1 ],
 hour:
 [ 313347,
  316733,
  316735,
  316968,
  316969,
  317349,
  317350,
  318746,
  318747,
  324667
 ]
}

【问题讨论】:

  • 我有 mongo db 版本 v3.6.5。它对我很有效。
  • $slice 投影已在 2.2 版中引入,因此@Jack 在这里不是问题...而@Arin 您的代码有效,请参见此处mongoplayground.net/p/_1sBpuQNOuO... 可能是问题出在.toArray()这里
  • @AnthonyWinzlet 似乎 toArray() 确实可能是问题之一,尽管在删除它之后我仍然没有得到切片数据。难道是 .find() 返回游标的事实和问题?
  • 是的......在这里使用回调或承诺或异步等待

标签: javascript node.js mongodb mongoose slice


【解决方案1】:

我建议您将 MongoDB 版本升级到 v3.6.5

您上面的查询就像黄油一样工作,这是输出:

{ 
    "_id" : "fakeId", 
    "subscribers" : [
        0.0
    ], 
    "followers" : [
        1.0
    ], 
    "hour" : [
        324667.0
    ]
}

让我知道此升级是否有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-15
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    • 2022-01-24
    • 2014-04-27
    相关资源
    最近更新 更多