gpt4 book ai didi

mongodb - 聚合和运算符的区别

转载 作者:行者123 更新时间:2023-12-03 08:44:41 25 4
gpt4 key购买 nike

我一直在阅读一些 mongodb 文档,并遇到了一些令人困惑的术语,即如何区分符号何时用作聚合函数或运算符。

例如,$size函数要么计算数组中的项数,要么检查数组中的元素数是否等于数字,有什么方法可以知道什么该函数将在什么时候执行?通过反复试验,我发现 $size 会抛出错误,除非在 $match 步骤中将数字传递给它,但是是否有一些规则/指南,以便我可以事先知道它会做什么?

db.collection.aggregate([
{
$project: {
key: 1,
number: {
$size: "$key"
}
}
},
{
$match: {
key: {
$size: 1
}
}
}
])

最佳答案

要查询 MongoDB 中的数据,您可以使用find方法或 aggregate方法。您可以将运算符与这些方法一起使用。

这些query operatorsfind 方法一起使用。其中一些还可以与 aggregate 方法的 $match 阶段一起使用(稍后将详细介绍)。

这些aggregation pipeline operatorsaggregate 的阶段中使用。其中一些也可以与 find 方法一起使用(稍后将详细介绍)。

您会注意到,有一些常见的运算符(operator)名称;例如,$eq$gte$or$type$size 等。但是,它们的用法和/或功能可能不同。 $eq 运算符具有相同的功能,但使用语法不同,而 $type 运算符具有不同的功能(和使用语法)。

并且,其中一些运算符可以与这两种方法一起使用。



一些使用场景:

让我们考虑一个 users 集合和一些查询:

{ "_id" : 1, "age" : 21, "firstname" : "John" }
{ "_id" : 2, "age" : 18, "firstname" : "John" }
{ "_id" : 3, "age" : "39", "firstname" : "Johnson" }

查询:

db.users.find( { firstname: { $eq: "John"}, age: { $gt: 20 } } )

此查询的过滤器与{firstname: "John"},age: { $gt: 20 } }相同。这使用查询运算符 $eq$gt 。可以在 aggregate 方法的 $match 阶段编写相同的查询:

db.users.aggregate([
{ $match: { firstname: "John", age: { $gt: 20 } } },
])

本例中使用的运算符与查询运算符相同。查询比较运算符可以与aggregate方法的$match$lookup阶段一起使用。



另一种情况:

db.users.aggregate([
{ $project: { ageGreaterThan20: { $gt: [ "$age", 20 ] } } },
])

这是聚合比较运算符的用法 $gt 。请注意,这是在聚合查询中使用的,但在 $project 阶段内。

正如您在聚合查询中使用查询运算符一样,您也可以在find 方法中使用聚合运算符。但是,这必须与“特殊” $expr 一起使用。运算符(operator)。例如:

db.users.find( { $expr: { $gt: [ "$age", 20 ] } } )

$expr 的优点是 - 有许多聚合运算符可以在find 查询中使用。例如,使用 $strLenCP:

db.users.find( { $expr: { $gt: [ { $strLenCP: "$firstname" }, 4 ] } } )

您还可以在聚合中、$match$lookup 阶段中使用 $expr:

db.users.aggregate([
{ $match: { $expr: { $gt: [ "$age", 20 ] } } },
])



最后:

I have been reading up on some mongodb documentation and ran across some confusing terminology, namely how to differentiate when a symbol will be used as an aggregate function or as an operator. ... but is there some rule/guideline so I can know what it will do beforehand?

阅读有帮助,练习有帮助,经验帮助最好。您可以在特定场景或用例中使用特定运算符。要实现某些功能,您可以使用适当的方法和运算符。

引用: Operators

关于mongodb - 聚合和运算符的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61944092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com