mongodb - 蒙戈 : Selecting X elements from an array placed in an object

标签 mongodb mongodb-.net-driver

我在 MongoDB 中为用户创建了以下集合:

{
  "_id" : 1,
  "facebook_id" : XX,
  "name": "John Doe",
  "points_snapshot" : [{
      "unix_timestamp" : 1312300552,
      "points" : 115
    }, {
      "unix_timestamp" : 1312330380,
      "points" : 110
    }, {
      "unix_timestamp" : 1312331610,
      "points" : 115
    }]
}

是否可以编写一个查询,通过该查询我可以获得 id 1 的用户以及特定日期后的快照。例如:1312330300?

基本上将快照限制为符合某些条件的 X 个数字?

到目前为止,我已经在 C# 中尝试过:

Query.And(
 Query.EQ("facebook_id", XX), 
 Query.GTE("points_snapshot.unix_timestamp", sinceDateTimeStamp)))
 .SetFields("daily_points_snapshot", "facebook_id")

我很快意识到这对我想要的东西不起作用。

任何帮助将不胜感激! 谢谢!

编辑:我对此的解决方案

如果有人想快速解决这个问题,这就是我最终所做的:

var points = MyDatabase[COLLECTION_NAME]
                .Find(Query.EQ("facebook_id", XX))
                .SetFields("points_snapshot", "facebook_id")
                .FirstOrDefault();

if (points != null) {
        var pointsArray = points.AsBsonDocument["points_snapshot"].AsBsonArray
        .Where(x => x.AsBsonDocument["unix_timestamp"].AsInt32 > sinceDateTimeStamp)
        .ToList();

        return pointsArray;
}

最佳答案

Is it possible to write one query which by which I can get the user for id 1 along with the snapshots after a particular day. eg: 1312330300?

不可能。

这里的问题是 MongoDB 查询返回所有匹配的文档。您的文档包含一组对象,但 MongoDB 不会将这些视为“文档”。

现在,您可以限制返回的字段,但在您的情况下,您实际上想要限制返回的“数组部分”。

这是一个长期悬而未决的问题,JIRA 票证是 here .这张罚单的日期大约是 18 个月前,但一直被推迟。因此,如果此类查询对您的架构至关重要,您可能需要重新设计架构。

关于mongodb - 蒙戈 : Selecting X elements from an array placed in an object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7606284/

相关文章:

C# MongoDB bulk Upsert - 批量写入操作导致一个或多个错误

c# - 使用 C# 驱动程序按名称打开 MongoDB GridFS

c# - 复制一个 mongodb 集合

javascript - Meteor 404 错误 "Method ' messages.insert' 未找到”

node.js - mongodb 关闭选项不可用

c# - 防止嵌套对象的 mongodb c# 驱动程序将 id 序列化为 _id

mongodb - 在 Mac 上从本地 docker 镜像连接到 meteor mongo

mongodb - 在集群外使用 StatefulSets 在 Kubernetes 上公开 MongoDB

c# - MongoDB c#驱动程序 - 一个名为Id的字段可以不是Id吗?

c# - MongoDB .NET 驱动程序 - StartsWith 和 Contains 包含松散类型数据