mongodb morphia怎么获取最大的id
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb morphia怎么获取最大的id相关的知识,希望对你有一定的参考价值。
第一种:使用IdGenerator属性,并在Bson特性上进行指定。第二种:自增id生成器。这个需要你自己写代码来实现,原则是1个集合对应1个自增序列,并使用MongoShell自带的$inc进行原子自增操作(更新后再获取FindAndModify)。
根据你的需求,你应该当选择第二种方法。可以利用反射将每一个实体类对应的集合去让其自动生成自增集合;或者由一个集合容器来统一管理所有需要自增的集合的自增序列。 参考技术A 一
在mongodb的单个查询中获取最小值和最大值
【中文标题】在mongodb的单个查询中获取最小值和最大值【英文标题】:Get min and max value in single query in mongodb 【发布时间】:2018-11-26 18:05:30 【问题描述】:考虑“单词”中的以下文档:
[
_id: 1,
usages: 2,
word: "Name"
,
_id: 2,
usages: 1,
word: "Street"
,
_id: 3,
usages: 1,
word: "House"
,
_id: 4,
usages: 3,
word: "Table"
,
_id: 5,
usages: 3,
word: "Bread"
,
_id: 6,
usages: 4,
word: "Door"
]
如何获取使用次数最低或最高的所有记录?最低应返回 id 2 和 3(及其单词),最高应返回 id 6 及其单词。
我需要将这些数据聚合成随机数量的最低/最高记录(准确地说是 50 个),因此它需要是一个聚合。
它应该是单次查找,因此使用 $max 或 $min 的另一个查询无法找到最小值/最大值。
MongoDB 版本是 3.4.7,Mongoose 版本是 5.0.0-rc1。不需要 Mongoose 解决方案,因为我可以使用原始查询。 (但它是首选!)
例子:
Words.aggregate([
$match: _
usages: WHAT_SHOULD_I_HAVE_HERE
,
$sample:
size: 50
])
谢谢!
【问题讨论】:
【参考方案1】:你可以试试下面的聚合
$facet
将为您提供usages
的两个最低和最高值,您可以使用$filter
运算符轻松地通过它们$project
db.collection.aggregate([
"$facet":
"minUsages": [ "$sort": "usages": -1 ],
"maxUsages": [ "$sort": "usages": 1 ]
,
"$addFields":
"lowestUsages":
"$arrayElemAt": ["$minUsages", 0]
,
"highestUsages":
"$arrayElemAt": ["$maxUsages", 0]
,
"$project":
"minUsages":
"$filter":
"input": "$minUsages",
"as": "minUsage",
"cond":
"$eq": ["$$minUsage.usages", "$lowestUsages.usages"]
,
"maxUsages":
"$filter":
"input": "$maxUsages",
"as": "maxUsage",
"cond":
"$eq": ["$$maxUsage.usages", "$highestUsages.usages"]
])
或者您也可以使用find
查询来完成此操作
const minUsage = await db.collection.find().sort( "usages": -1 ).limit(1)
const maxUsage = await db.collection.find().sort( "usages": 1 ).limit(1)
const minUsages = await db.collection.find( "usages": "$in": [minUsages[0].usages] )
const maxUsages = await db.collection.find( "usages": "$in": [maxUsages[0].usages] )
看看here
【讨论】:
您的聚合工作完美!尽管您仍然添加了具有 2 个或 4 个查询的方法。你认为 find 方法比聚合方法更快吗?以上是关于mongodb morphia怎么获取最大的id的主要内容,如果未能解决你的问题,请参考以下文章
Playframework + Morphia + MongoDb + ElasticSearch = Disater?