在一个ObjectIds数组而不仅仅是一个ObjectId的字段上执行$ lookup的语法是什么?
示例订单文档:
{
_id: ObjectId("..."),
products: [
ObjectId("..<Car ObjectId>.."),
ObjectId("..<Bike ObjectId>..")
]
}
Run Code Online (Sandbox Code Playgroud)
不工作查询:
db.orders.aggregate([
{
$lookup:
{
from: "products",
localField: "products",
foreignField: "_id",
as: "productObjects"
}
}
])
Run Code Online (Sandbox Code Playgroud)
期望的结果
{
_id: ObjectId("..."),
products: [
ObjectId("..<Car ObjectId>.."),
ObjectId("..<Bike ObjectId>..")
],
productObjects: [
{<Car Object>},
{<Bike Object>}
],
}
Run Code Online (Sandbox Code Playgroud) 我有像这样的子文档数组
{
"_id" : ObjectId("512e28984815cbfcb21646a7"),
"list" : [
{
"a" : 1
},
{
"a" : 2
},
{
"a" : 3
},
{
"a" : 4
},
{
"a" : 5
}
]
}
Run Code Online (Sandbox Code Playgroud)
我可以过滤子文档> 3
我期待下面的结果
{
"_id" : ObjectId("512e28984815cbfcb21646a7"),
"list" : [
{
"a" : 4
},
{
"a" : 5
}
]
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用$elemMatch但返回数组中的第一个匹配元素
我的查询:
db.test.find( { _id" : ObjectId("512e28984815cbfcb21646a7") }, {
list: {
$elemMatch:
{ a: { $gt:3 }
}
}
} ) …Run Code Online (Sandbox Code Playgroud) 这是我与MongoDB的第一天,所以请跟我一起轻松:)
我无法理解$unwind操作员,也许是因为英语不是我的母语.
db.article.aggregate(
{ $project : {
author : 1 ,
title : 1 ,
tags : 1
}},
{ $unwind : "$tags" }
);
Run Code Online (Sandbox Code Playgroud)
我想项目操作员是我能理解的(就像SELECT是,不是吗?).但是,$unwind(引用)为每个源文档中的展开数组的每个成员返回一个文档.
这是一个JOIN吗?如果是,如何的结果$project(有_id,author,title和tags字段)可以用比较tags阵列?
注意:我从MongoDB网站上采用了这个例子,我不知道tags数组的结构.我认为这是一个简单的标签名称数组.
使用MongoDB $in子句时,返回文档的顺序是否始终对应于数组参数的顺序?
mapreduce mongoose mongodb mongodb-query aggregation-framework
主要集合是零售商,其中包含商店阵列.每个商店都包含一系列优惠(您可以在这家商店购买).这个提供的数组有一系列的大小.(见下面的例子)
现在我尝试找到所有尺寸可用的优惠L.
{
"_id" : ObjectId("56f277b1279871c20b8b4567"),
"stores" : [
{
"_id" : ObjectId("56f277b5279871c20b8b4783"),
"offers" : [
{
"_id" : ObjectId("56f277b1279871c20b8b4567"),
"size": [
"XS",
"S",
"M"
]
},
{
"_id" : ObjectId("56f277b1279871c20b8b4567"),
"size": [
"S",
"L",
"XL"
]
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
我试过这个查询: db.getCollection('retailers').find({'stores.offers.size': 'L'})
我期待一些像这样的输出:
{
"_id" : ObjectId("56f277b1279871c20b8b4567"),
"stores" : [
{
"_id" : ObjectId("56f277b5279871c20b8b4783"),
"offers" : [
{
"_id" : ObjectId("56f277b1279871c20b8b4567"),
"size": [
"S",
"L",
"XL"
]
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
但我的查询输出还包含与sizeXS,X和M 的不匹配的报价.
我如何强制MongoDB只返回与我的查询匹配的商品? …
对于某个带字段的集合,{ wins: Number }我如何使用MongoDB Aggregation Framework获取集合中所有文档的获胜总数?
如果我有3个文件wins: 5,wins: 8,wins: 12分别,我怎么可能使用MongoDB的聚合框架返回的总数,即total: 25.
mongodb 2.2中引入的聚合框架是否比map/reduce有任何特殊的性能改进?
如果是,为什么,如何以及多少?
(我已经为自己做过测试了,性能几乎相同)
假设我有一些包含一些文档的集合.这样的事情.
{ "_id" : ObjectId("4f127fa55e7242718200002d"), "id":1, "name" : "foo"}
{ "_id" : ObjectId("4f127fa55e7242718200002d"), "id":2, "name" : "bar"}
{ "_id" : ObjectId("4f127fa55e7242718200002d"), "id":3, "name" : "baz"}
{ "_id" : ObjectId("4f127fa55e7242718200002d"), "id":4, "name" : "foo"}
{ "_id" : ObjectId("4f127fa55e7242718200002d"), "id":5, "name" : "bar"}
{ "_id" : ObjectId("4f127fa55e7242718200002d"), "id":6, "name" : "bar"}
Run Code Online (Sandbox Code Playgroud)
我想通过"name"字段找到此集合中的所有重复条目.例如,"foo"出现两次,"bar"出现3次.
我在mongo中有一些看起来像这样的文档:
{
_id : ObjectId("..."),
"make" : "Nissan",
..
},
{
_id : ObjectId("..."),
"make" : "Nissan",
"saleDate" : ISODate("2013-04-10T12:39:50.676Z"),
..
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望能够计算出每天销售的车辆数量.然后,我想要查看今天或者过去七天这样的窗口.
我能用一些丑陋的代码完成日常视图
db.inventory.aggregate(
{ $match : { "saleDate" : { $gte: ISODate("2013-04-10T00:00:00.000Z"), $lt: ISODate("2013-04-11T00:00:00.000Z") } } } ,
{ $group : { _id : { make : "$make", saleDayOfMonth : { $dayOfMonth : "$saleDate" } }, cnt : { $sum : 1 } } }
)
Run Code Online (Sandbox Code Playgroud)
然后产生结果
{
"result" : [
{
"_id" : {
"make" : "Nissan", …Run Code Online (Sandbox Code Playgroud) 尝试使用icCube创建MongoDB数据源.我们的想法是将数组的大小作为新字段返回.就像是 :
$project:
{
"people": 1,
"Count myFieldArray" : {$size : "$myFieldArray" }
}
Run Code Online (Sandbox Code Playgroud)
但我得到一些记录以下错误:
The argument to $size must be an Array, but was of type: EOO
Run Code Online (Sandbox Code Playgroud)
如果字段为空或不是数组(摆脱错误),是否有一种方法大小为0?