我正在MongoDB中寻找合适的查询来比较关联数组中的两个值,我有这样的文档:
{
"_id" : ObjectId("5502cc4280ee2cd549dee9e8"),
"formats" : [
{
"name" : "first",
"prices" : [
{
"futurePrice" : 5.49,
"price" : 5.49
}
]
},
{
"name" : "second",
"prices" : [
{
"futurePrice" : 5.49,
"price" : 5.49
}
]
}
]
}
我需要比较 futurePrice 和 price 字段,以查找至少具有一种格式和 futurePrice 的文档
我尝试了这样的东西:
Collection.find({'formats.prices': { $elemMatch: 'this.futurePrice > this.price' }}, ...
但是好像不行,有办法吗?
您可以使用$cond
运算符对聚合框架执行此操作:
db.Testing.aggregate([
{
'$unwind': '$formats'
},
{
'$unwind': '$formats.prices'
},
{
'$project':
{
formats :1,
eq : {
$cond: [ { $gt: [ '$formats.prices.futurePrice', '$formats.prices.price' ] }, 1, 0 ]
}
}
},
{
$match: { eq: 1 }
},
{
'$group':
{
'_id' : '$_id',
'formats':
{
'$push': '$formats'
}
}
}
])
编辑:
正如评论中提到的@Pepkin88,您可以使用$在哪里
运算符来获得相同的结果。尽管它没有利用索引并且可能会影响性能。
db.Testing.find(function() {
for (i = 0; i < this.formats.length; i++) {
for (j = 0; j < this.formats[i].prices.length; j++)
return this.formats[i].prices[j].futurePrice > this.formats[i].prices[j].price
}
})
我有一个包含以下数据的文档集合 我想获取具有“管理员”和“用户”角色且状态为“已创建”的用户的文档计数。现在,我正在尝试匹配电子邮件ID和角色。 有什么方法可以比较来自同一对象的数组元素吗?
我有两个对象数组:
问题内容: 我想比较两个数组…理想地,有效地比较。没有什么幻想,只要它们是相同的,如果不相同。毫不奇怪,比较运算符似乎不起作用。 每个数组都可以使用JSON编码,但是有没有一种更快或更“更好”的方法来简单地比较数组而不必遍历每个值? 问题答案: 要比较数组,请遍历它们并比较每个值: 比较数组: 用法: 您可能会说“ 但是比较字符串要快得多-没有循环… ”,那么,您应该注意存在ARE循环。第一个递归
我无法进行数字比较: 问题是,它从第一个数字开始比较数字,即9大于10,但1大于09。 我如何将数字转换成一种类型来进行真正的比较?
问题内容: 在我的收藏夹中,每个文档都有2个修改和同步的日期。我想查找已修改>同步,或不存在同步的内容。 我试过了 但没有显示我的期望。有任何想法吗? 谢谢 问题答案: 您不能将一个字段与具有正常查询匹配的另一个字段的值进行比较。但是,您可以使用聚合框架执行此操作: 我在其中输入“您的其他常规查询”,因为您可以使该位使用索引。因此,如果您只想对该字段所在的文档执行此操作,则可以执行以下操作: 用输
问题内容: 我不知道为什么所有人都打印错误。 当我运行“ java ByteArray”时,答案是“ false false false false”。 我认为a []等于b [],但是JVM告诉我我错了,为什么?? 问题答案: 如果要比较包含基本类型值(例如字节)的数组的实际内容,请使用此选项。 使用了包含对象数组的比较。