我正在尝试根据某些条件更新name我的集合中调用的字段。coll1我首先创建了一个聚合管道,根据我的标准过滤出文档。
var local_filter = { "$or" :[
{'fullText': {'$eq': "404 Error"}},
{'fullText': {'$eq': "Unknown Error"}},
{'fullText': {'$eq': "503 Error"}},
{'fullText': {'$eq': "400 Error"}},
{'fullText': {'$eq': "500 Error"}},
{'fullText': {'$eq': "Read timed out"}},
{'fullText': {'$eq': "410 Error"}},
{'fullText': {'$eq': "403 Error"}},
{"fullText": {'$eq':""}},
]}
var foreign_filter= { "$and" :[
{'matchingrecords.Text': {'$ne': "404 Error"}},
{'matchingrecords.Text': {'$ne': "Unknown Error"}},
{'matchingrecords.Text': {'$ne': "503 Error"}},
{'matchingrecords.Text': {'$ne': "400 Error"}},
{'matchingrecords.Text': {'$ne': "500 Error"}},
{'matchingrecords.Text': {'$ne': "Read timed out"}},
{'matchingrecords.Text': {'$ne': "410 …Run Code Online (Sandbox Code Playgroud) mongodb mongodb-query nosql-aggregation aggregation-framework
假设 MongoDB 中有 3 个假设的集合:customers、orders和orderItems。
每个客户有多个订单,每个订单有多个订单项目。
以下是这 3 个集合的一些示例数据:
[
{
customer_id: 1,
name: "Jim Smith",
email: "jim.smith@example.com"
},
{
customer_id: 2,
name: "Bob Jones",
email: "bob.jones@example.com"
}
]
Run Code Online (Sandbox Code Playgroud)
[
{
order_id: 1,
customer_id: 1
},
{
order_id: 2,
customer_id: 1
}
]
Run Code Online (Sandbox Code Playgroud)
[
{
order_item_id: 1,
name: "Foo",
price: 4.99,
order_id: 1
},
{
order_item_id: 2,
name: "Bar",
price: 17.99,
order_id: 1
},
{
order_item_id: 3,
name: "baz",
price: 24.99, …Run Code Online (Sandbox Code Playgroud) 我的 collection1 在项目字段中保存了 collection2 的 _ids ,如下所示:
{
"name": "adafd",
"employeeId": "employeeId",
"locations": [
"ObjectId(adfaldjf)",
"ObjectId(adfaldjf)",
"ObjectId(adfaldjf)",
"ObjectId(adfaldjf)",
"ObjectId(adfaldjf)",
"ObjectId(adfaldjf)"
]
}
Run Code Online (Sandbox Code Playgroud)
集合2如下
"collection2": [
{
"location": "india",
"states": [
{
"stateCode": "TN",
"districts": {
"cities": [
{
"code": 1,
"name": "xxx"
},
{
"code": 4,
"name": "zzz"
},
{
"code": 6,
"name": "yyy"
}
]
}
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
我试图在查找后过滤 collection2 内的嵌套数组,如下所示:
db.collection.aggregate([
{
$lookup: {
from: "collection2",
localField: "locations",
foreignField: "_id",
as: "locations"
}
},
{
$match: …Run Code Online (Sandbox Code Playgroud) mongodb mongodb-query nosql-aggregation aggregation-framework dynamodb-queries
我已经在mongo中使用了聚合,我知道在分组计数等方面的性能优势.但是,mongo在计算集合中所有文档的这两种方式上的性能有何不同?:
collection.aggregate([
{
$match: {}
},{
$group: {
_id: null,
count: {$sum: 1}
}
}]);
Run Code Online (Sandbox Code Playgroud)
和
collection.find({}).count()
Run Code Online (Sandbox Code Playgroud)
更新:第二种情况:假设我们有这样的样本数据:
{_id: 1, type: 'one', value: true}
{_id: 2, type: 'two', value: false}
{_id: 4, type: 'five', value: false}
Run Code Online (Sandbox Code Playgroud)
用aggregate():
var _ids = ['id1', 'id2', 'id3'];
var counted = Collections.mail.aggregate([
{
'$match': {
_id: {
'$in': _ids
},
value: false
}
}, {
'$group': {
_id: "$type",
count: {
'$sum': 1
}
}
}
]);
Run Code Online (Sandbox Code Playgroud)
用count():
var counted …Run Code Online (Sandbox Code Playgroud) 我有以下 mongo DB 架构:
{
"_id" : "5b76c3c037548390fdb5b40e",
"userId" : "4601",
"modified" : ISODate("2018-08-21T19:13:43.301+05:30"),
"rStatus" : "started",
},
{
"_id" : "5b76c3c037548390fdb5b40e",
"userId" : "13",
"modified" : ISODate("2018-08-21T19:13:43.301+05:30"),
"rStatus" : "completed",
},
........
Run Code Online (Sandbox Code Playgroud)
需要通过修改日期和 rStatus 字段的计数来获取数据组,例如
{
modified:"2018-08-21",
count :{"completed":1,"ongoing":4}
},
{
modified:"2018-07-23",
count :{"completed":2,"ongoing":5}
},
Run Code Online (Sandbox Code Playgroud)
我正在使用 $group 但它按修改日期计数,而不是按内部键的值。