小编Bla*_*ven的帖子

如何在 MongoDB 和 Node 中引用另一个集合中的 ObjectID?

我对此还很陌生,所以请耐心等待,但我有 2 个收藏。一个称为照片,另一个称为用户。

在 Node 中,我使用 mongoose 获取数据并将其放入 MongoDB 中。我的架构可以正常工作:

var picSchema = new Schema({
        uid: String,
        pid: String,
        oFile: String
});
Run Code Online (Sandbox Code Playgroud)

我想要做的是对于 uid,我想为上传照片的用户添加 ObjectId。我可以将其作为字符串传递,但是我认为我必须将该字段设置为 ObjectId,但似乎我不能这样做?

除非我遗漏了什么,否则我不妨在其中添加用户名并将其用作参考?

mongoose mongodb node.js

5
推荐指数
1
解决办法
1万
查看次数

查询以匹配包含点的多边形

我的mongodb集合中的文档如下所示:

{
"_id" : ObjectId("5562d6831683523f449e7d85")
"geometry" : {
"type" : "Polygon",
"coordinates" : 
    [[
    [-122.4,37.81],
    [-132.9, 39.9],
    [-122.28, 37.80],
    [-124.18, 39.81]
    ]]
}}
Run Code Online (Sandbox Code Playgroud)

我有一个点(长对),我将其称为xy。我需要查看文档的坐标是否创建了一个多边形,以便这些坐标位于该多边形内。

因此,我当然需要计算描述多边形等各边的线,然后查看该点的坐标是否在其中。但是,现在,让我们假设我们要查询的文档具有整个数组的最大和最小经度值,xy在其中。

这是我尝试查询此内容的方法:

db.<collection-name>.find(
    {'geometry.coordinates':
        {$elemMatch:
            {
                [{$gt:-122.1}, {$lt:-122.0 }], [{$gt: 37.89 },{$lt: 37.91}]
            }
        }
    }
)
Run Code Online (Sandbox Code Playgroud)

但是,结果是:Unexpected token [。我试图按照这里的例子。

我如何查询这样的数组,其中文档中数组的每个元素都有条件?谢谢。

geolocation mongodb geojson mongodb-query

5
推荐指数
1
解决办法
1200
查看次数

Postgres中有成千上万张表格-一种反模式?

我正在开发一个从相机收集快照并将该快照的记录保存到快照表中的软件。我们有数千台摄像机和数亿个快照记录。每个快照记录仅包含少量数据-id,camera_id,时间戳和注释(字符串字段,以获取其他信息)。

我们开始注意到某些查询中的性能问题,主要是在给定时间范围内获取大量快照。除了升级Postgres所运行的硬件之外,我们还在寻找提高整个系统性能的替代方法。

在使用MongoDB之前,该团队也遇到了类似的情况,其中一个表用于相机,一个表用于快照。他们切换到为每个摄像机使用单独的快照表,从而产生了数千个快照表。这将性能提高了10倍,而不会引起新的问题。

现在,我们在Postgres上面临着同样的问题。即使上述解决方案有效,但似乎并没有针对数据库进行优化。在Postgres中做同样的事情会是一个疯狂的想法吗?通常使用的表数量是否存在已知限制?在该用例中,我找不到很好的信息。

database postgresql performance

5
推荐指数
1
解决办法
401
查看次数

节点js mongoose填充限制

我有两个架构说城市和博客.我想用分页创建一个博客页面.所以我参考城市名称填充博客.如果我没有城市的博客,那么就不应该退回.这是我获取博客的查询.

City.find().skip(req.params.pageIndex*2).limit(2).sort('-created').populate('articles').exec(function(err, cities) {

res.jsonp(cities)

}
Run Code Online (Sandbox Code Playgroud)

如果我使用上面的查询.我得到的城市也没有博客.因此它会在视图中产生一个空行.我不希望这种情况发生.如何限制填充的字段而不返回没有博客的城市.有什么建议?

pagination mongoose mongodb node.js

5
推荐指数
1
解决办法
4115
查看次数

聚合项目组通过Spring Data提取日,月和年

要直接,我该怎么做:

group._id = { 
    year: { $year : [{ $subtract: [ "$timestamp", 25200000 ]}] }, 
    month: { $month : [{ $subtract: [ "$timestamp", 25200000 ]}] }, 
    day: { $dayOfMonth : [{ $subtract: [ "$timestamp", 25200000 ]}] }
};
Run Code Online (Sandbox Code Playgroud)

用spring数据

我已经尝试了这个和其他一些形式并没有成功

Aggregation aggregation = Aggregation.newAggregation(
                Aggregation.match(c),
                Aggregation.project("programa", "custo", "duracao", "dataHora")
                    .andExpression("dataHora").minus(25200000).extractDayOfMonth().as("dia")
                    .andExpression("dataHora").minus(25200000).extractMonth().as("mes")
                    .andExpression("dataHora").minus(25200000).extractYear().as("ano"),
                Aggregation.group("programa", "ano", "mes", "dia")
                    .count().as("count")
                    .sum("custo").as("valorTotal")
                    .sum("duracao").as("duracaoTotal")
                    .first("dataHora").as("dataHora"),
                Aggregation.sort(Direction.ASC, "dataHora")
        );
Run Code Online (Sandbox Code Playgroud)

我需要在mongodb中按天,月和年进行分组,否则我需要在代码中转换所有这些分组数据.

提前致谢

java mongodb spring-mongo mongodb-query aggregation-framework

5
推荐指数
1
解决办法
2186
查看次数

MongoDB 聚合 - 即使不存在 $group by date

我已经有一个查询,如下所示:

{$match:{
      "when":{$gt: new Date(ISODate().getTime() - 1000 * 60 * 60 * 24 * 30)}
}}, 
{$project:{
      "year":{$year:"$when"}, 
      "month":{$month:"$when"}, 
      "day": {$dayOfMonth:"$when"}
}}, 
{$group:{
      _id:{year:"$year", month:"$month", day:"$day"}, 
      "count":{$sum:1}
}},
{$sort:{
    _id: 1
}}
Run Code Online (Sandbox Code Playgroud)

结果如下所示:

{ "_id" : { "year" : 2015, "month" : 10, "day" : 19 }, "count" : 1 }
{ "_id" : { "year" : 2015, "month" : 10, "day" : 21 }, "count" : 2 }
Run Code Online (Sandbox Code Playgroud)

除了过去 30 天的结果,我怎么能以相同的格式获得结果,即使count是 0?

像这样:

{ "_id" : { …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

5
推荐指数
1
解决办法
2179
查看次数

与聚合匹配的项目不在mongodb中工作

我试图根据一些匹配条件获取数据.首先我试过这个:这里ending_date是全日期格式

    Offer.aggregate([ 
    { 
        $match: { 
            carer_id : req.params.carer_id,
            status : 3
        }
    },
    {
        $group : {
            _id : { year: { $year : "$ending_date" }, month: { $month : "$ending_date" }}, 
            count : { $sum : 1 }
        }
    }], 
    function (err, res)
    { if (err) ; // TODO handle error 
         console.log(res); 
    });
Run Code Online (Sandbox Code Playgroud)

这给了我以下输出:

[ { _id: { year: 2015, month: 11 }, count: 2 } ]
Run Code Online (Sandbox Code Playgroud)

现在我想检查一年,所以我正在尝试这个:

    Offer.aggregate([
    {
        $project: {
            myyear: {$year: "$ending_date"}
        }
    },
    { 
        $match: …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

5
推荐指数
2
解决办法
2万
查看次数

有什么方法可以使用mongoose从mongodb的批量操作中获取修改后的IDS?

let dbOperations = Edge.collection.initializeOrderedBulkOp()
edges.forEach(edge => {
    dbOperations.find({_id: edge.id}).upsert().updateOne({
        $set: {
            value: edge.value
        },
        $setOnInsert: {
            _id: edge.id
        }
    })
})
dbOperations.execute()
    .then(result => {
        console.log(result.nModified) // This shows the number of edges that is actually modified
        console.log(result.getModifiedIds()) // This is what I want to achieve
    })
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这个目标?

mongoose mongodb mongodb-query

5
推荐指数
1
解决办法
1790
查看次数

如何从mongodb的两个日期得到差异的总和

我想总结一下minuts中starttime和endtime的差异.

{
    "_id" : ObjectId("56cd544df7851e850d8b4573"),
    "user_id" : "281",
    "document_id" : "1455614372.pdf",
    "page_number" : "1",
    "starttime" : ISODate("48118-03-20T01:35:14Z"),
    "endtime" : ISODate("48118-03-20T04:29:10Z")
}
{
    "_id" : ObjectId("56cd544df7851e850d8b4574"),
    "user_id" : "281",
    "document_id" : "1455614372.pdf",
    "page_number" : "1",
    "starttime" : ISODate("48118-03-20T14:29:49Z"),
    "endtime" : ISODate("48118-06-22T12:52:36Z")
}
{
    "_id" : ObjectId("56cd544df7851e850d8b4575"),
    "user_id" : "281",
    "document_id" : "1455614372.pdf",
    "page_number" : "2",
    "starttime" : ISODate("48118-03-20T04:29:10Z"),
    "endtime" : ISODate("48118-03-20T14:29:49Z")
}
Run Code Online (Sandbox Code Playgroud)

我的收藏名称是pdftracker.

mongodb mongodb-query aggregation-framework

5
推荐指数
1
解决办法
900
查看次数

MongoDB 按键值对聚合/分组

我的数据看起来像这样:

    { 
            "_id" : "9aa072e4-b706-47e6-9607-1a39e904a05a", 
            "customerId" : "2164289-4", 
            "channelStatuses" : {
                    "FOO" : {
                    "status" : "done"
                    }, 
                    "BAR" : {
                    "status" : "error"
                    }
            }, 
            "channel" : "BAR", 
    }
Run Code Online (Sandbox Code Playgroud)

我的聚合/组如下所示:

    { 
            "_id" : {
                    "customerId" : "$customerId", 
                    "channel" : "$channel", 
                    "status" : "$channelStatuses[$channel].status"
            }, 
                    "count" : {
                    "$sum" : 1
            }
    }
Run Code Online (Sandbox Code Playgroud)

所以基本上对于示例数据,该组应该给我一个按以下分组分组的组:

   {"customerId": "2164289-4", "channel": "BAR", "status": "error"}
Run Code Online (Sandbox Code Playgroud)

但是我不能在聚合/组中使用 []-indexing。我应该怎么做?

mapreduce mongodb mongodb-query aggregation-framework

5
推荐指数
1
解决办法
2138
查看次数