假设我收集了以下文档:
{_id: 1,fruit: apple,attributes: [{color: red,size: small,qty: 5},{color: green,size: small, qty 3}]},
{_id: 2,fruit: mango,attributes: [{color: red,size: big, qty: 6},{color: green,size: small, qty: 7},{color: gold,size: medium, qty: 5},{color: yellow,size: small, qty: 20}]},
{_id: 3,fruit: pineapple },
{_id: 4,fruit: orange,attributes: [{color: orange,size: small,qty: 2}]}
我需要根据属性返回这个。数量介于4和8之间
>
在属性数组中最多只显示2个符合搜索条件的元素,按数量降序排序
{_id:1,水果:苹果,属性:[{颜色:红色,大小:小,数量:5}]},
{u id:2,水果:芒果,属性:[{颜色:绿色,大小:小,数量:7},{颜色:红色,大小:大,数量:6}]},
{\u id:3,水果:菠萝},
{_id:4,水果:橙色}
这是我正在使用的查询:
db.test.aggregate([
{"$unwind":"$attributes"},
{"$match":{"attributes.qty": {$gt:4, $lt:8}}},
{"$group":{"_id":"$_id","fruit":{$first:"$fruit"},"attributes":{$addToSet: "$attributes"}}}
])
我得到以下结果:
{_id: 1,fruit: apple,attributes: [{color: red,size: small,qty: 5}]},
{_id: 2,fruit: mango,attributes: [{color: red,size: big, qty: 6},{color: green,size: small, qty: 7},{color: gold,size: medium, qty: 5}]}
这没有菠萝和橙子记录;芒果属性中的值没有排序,也不限于2
请帮忙
更新
尝试使用$redact。仍然没有接近获得所需的输出。在使用$and时,没有输出
db.test.aggregate([
{$match:{"site":{$exists:true}}},
{ "$redact": {
"$cond": {
"if": {
$and:[
{"$gt": ["$qty",4]},
{"$lt": ["$qty,8]}
]
},
"then": "$$DESCEND",
"else": "$$PRUNE"
}
}}
])
此查询应提供接近所需结果的结果。
db.test.aggregate([
{
"$redact": {
"$cond": {
"if": { $or : [ {$and:[ {"$gt": ["$qty",4]},{"$lt": ["$qty",8]}]}, { $not : "$qty" }]},
"then": "$$DESCEND",
"else": "$$PRUNE"
}
}
},
{
'$project': {
'fruit': 1,
'attributes' : {
"$cond" : [{'$and': [ {$ne : ["$attributes", []]},{"$ifNull": ["$attributes", false] }]},"$attributes", [{ 'qty':'test'}] ]
}
}
},
{'$unwind': '$attributes'},
{'$sort': {'attributes.qty': -1}},
{'$group': {'_id': '$_id' , 'fruit' : {'$first': '$fruit'},'attributes': {'$push' : '$attributes'}}},
{
"$redact": {
"$cond": {
"if": { '$ne': ['$qty','test']},
"then": "$$DESCEND",
"else": "$$PRUNE"
}
}
},
])
请注意,{$not:"$qty"}
是必要的,因为它也会扫描顶部文档,如果$redact
在顶部没有找到qty字段,这将返回false,这可能会删除我们不想要的整个文档。
结果:
{
"result" : [
{
"_id" : ObjectId("5568335b52cdca6ba1c290f0"),
"fruit" : "apple",
"attributes" : [
{
"color" : "red",
"size" : "small",
"qty" : 5
}
]
},
{
"_id" : ObjectId("5568335b52cdca6ba1c290f1"),
"fruit" : "mango",
"attributes" : [
{
"color" : "green",
"size" : "small",
"qty" : 7
},
{
"color" : "red",
"size" : "big",
"qty" : 6
},
{
"color" : "gold",
"size" : "medium",
"qty" : 5
}
]
},
{
"_id" : ObjectId("5568335b52cdca6ba1c290f3"),
"fruit" : "orange",
"attributes" : []
},
{
"_id" : ObjectId("5568335b52cdca6ba1c290f2"),
"fruit" : "pineapple",
"attributes" : []
}
],
"ok" : 1
}
不幸的是(在MongoDB 3.0中)聚合管道没有等效的$切片。在MongoDB问题跟踪器中支持/观看的相关功能请求是SERVER-6074:在$project中允许$切片运算符。
因此,您需要一个变通方法来获取最多2个文档。
问题内容: 我正在尝试使用getElementById()获取元素,但是即使元素存在,它也会返回null。我究竟做错了什么? 问题答案: 您必须将其放在一个 事件中。脚本执行时尚未到达DOM 。
问题内容: 我想返回数组的奇数,但是Eclipse似乎不接受我的返回码。我认为这需要返回整个数组,因为我将数组设置为方法的参数。如前所述,我需要传递一个数组并获取该数组的特定元素作为回报。即使我将该数组设为静态,如何返回单个元素? 编辑:好吧,这里是: 我知道这里可能存在多个错误,但我正在努力,不仅要返回奇数,还要将它们加在一起。 问题答案: 您的代码应如下所示: 这里的要点是方法返回类型,它应该
Firebase查询返回此查询的值 该项由model类捕获 但是,返回null
我正在建立一个登录系统,我遇到了一些问题,我不知道如何解决。我用find()和findOne()尝试了一些不同的选项,但在我的情况下两者都不起作用。下面是我试图解决这个问题的第一个解决方案。 此解决方案返回catch响应:User Not found。 这是我尝试过的第二种解决方案: 此解决方案返回:无法将属性“username”设置为null。 在这两种情况下,我都发送此请求:,它是我知道存在于
请帮我检查数据库属性。 然后,sizeBinding有第一个元素null(用于宽度)和绑定表达式实例(用于高度绑定)。我可以使用Mode=twoway设置绑定,但是我想知道为什么如果Mode没有设置为twoway就不会创建绑定实例。我认为这是因为表达式需要比路径更复杂。但是,我尝试了,但是返回null作为绑定。我尝试了GetBinding*方法,但它们的行为与完全相同。 我谷歌搜索的唯一一个问题就
我正在使用JDBC创建一个数据库,其中包含表和。两者都有一个名为 以下是我创建和填充表的SQL语句: 我试图运行以下查询: 或 或 使用 但是我没有得到任何结果。 这两个问题都可以解决。 SQLite数据库服务器显示相同的问题: 它与Firefox中的SQLite Manager一起工作。