- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
done_status = ['BAD_PU', 'TO_WH', 'RCVDPORT', 'RCVD', 'BAD_DEL', 'MISSFLT', 'OFFLOAD']
shipments = db.db_shipment.aggregate([{
"$lookup":{
"from":"db_shipment_status_history",
"localField":"_id",
"foreignField":"fk_shipment_id",
"as":"shipment_status_history_collection"
}
},
{"$unwind":
"$shipment_status_history_collection"},
{"$redact":{"$cond":{ "$if": { "status_value": {"$in": done_status } } },
"$then": "$$KEEP"
,"$else":"$$PRUNE"
}
},
{"$sort":
{'shipment_status_history_collection.rec_timestamp':-1}},
{"$limit":1},
{"$project":{"pkey":"$pkey","_code":"$_code"}}
])
错误:
pymongo.errors.OperationFailure: An object representing an expression must have exactly one field: { $cond: { $if: { status_value: { $in: [ "BAD_PU", "TO_WH", "RCVDPORT", "RCVD", "BAD_DEL", "MISSFLT", "OFFLOAD" ] } } }, $else: "$$PRUNE", $then: "$$KEEP" }
如何解决这个错误?我正在尝试在状态值处于给定状态值的发货记录中添加最新的发货状态历史记录。
最佳答案
更新聚合管道的编辑阶段。 if
、then
和 else
是 $cond
运算符的一部分,它们本身不是运算符。
此外,$in
运算符被传递给一个数组,在该数组中检查其第一项是否存在于第二项中。第二项通常是可迭代的。
蒙戈 3.6
messenger_pipeline_status = (
messenger_active_status['data']['pending']
+ messenger_active_status['data']['processing']
)
assigned_status = ['DEL_ASSIGNED','PU_ASSIGNED']
subpipeline = [
{
'$match': {
'$expr': {
'$and': [
{'$eq': ['$fk_shipment_id', '$$pkey']},
{'$eq': ['$fk_messenger_id', fk_user_id]},
{'$in': ['$status_value', assigned_status]}
]
}
}
},
{
'$sort': {
'rec_timestamp': -1
}
},
{
'$limit': 1
},
{
'$project': {
'fk_shipment_id': 1
}
}
]
pipeline = [
{
'$match': {
'status_value': {'$in': messenger_pipeline_status}
'is_deleted': False,
'is_postponed': False,
'is_active': True,
}
},
{
'$lookup': {
'from': 'db_shipment_status_history',
'let': {'pkey': '$pkey'},
'pipeline': subpipeline,
'as': 'shipment_status_history'
}
},
{
'$match': {
'shipment_status_history': {
'$ne': []
}
}
},
{
'$unwind': '$shipment_status_history'
},
{
'$project': {
'_id': 1,
'pkey': 1,
'_code': 1,
'date_created': 1,
'sender_full_name': '$sender.full_name',
'sender_raw_address': '$sender.raw_address',
'sender_formatted_address': '$sender.formatted_address',
'receiver_full_name': '$receiver.full_name',
'receiver_raw_address': '$receiver.raw_address',
'receiver_formatted_address': '$receiver.formatted_address',
'status_name': 1,
'team_value': 1,
'cs_name': 1,
'fk_messenger_id': '$shipment_status_history.fk_shipment_id'
}
}
]
result = db.db_shipment.aggregate(pipeline)
print(list(result))
[编辑] Mongo 3.2
以下聚合管道产生与上述类似的结果,并且是 Mongo 3.2 的有效查询。
messenger_pipeline_status = ['MISSFLT', 'OFFLOAD']
pipeline = [
{
'$match': {
'status_value': { '$in': messenger_pipeline_status}
'is_deleted': False,
'is_postponed': False,
'is_active': True,
}
},
{
"$lookup": {
'from': 'db_shipment_status_history',
'localField': 'pkey',
'foreignField': 'fk_shipment_id',
'as': 'shipment_status_history'
}
},
{
'$match': {
'shipment_status_history': {
'$ne': []
}
}
},
{
'$project': {
'_id': 1,
'pkey': 1,
'_code': 1,
'date_created': 1,
'sender_full_name': '$sender.full_name',
'sender_raw_address': '$sender.raw_address',
'sender_formatted_address': '$sender.formatted_address',
'receiver_full_name': '$receiver.full_name',
'receiver_raw_address': '$receiver.raw_address',
'receiver_formatted_address': '$receiver.formatted_address',
'status_name': 1,
'team_value': 1,
'cs_name': 1,
'shipment_status_history': {
'$filter': {
'input': '$shipment_status_history',
'as': 'shipment',
'cond': {
'$and': [
{'$eq': ['$$shipment.fk_shipment_id', fk_user_id]},
{'$in': ['$$shipment.status_value', assigned_status]},
]
}
}
},
}
},
{
'$unwind': '$shipment_status_history'
},
{
'$sort': {
'shipment_status_history.rec_timestamp': -1,
}
},
{
'$group': {
'_id': '$pkey',
'doc': {
'$first': '$$CURRENT'
}
}
},
{
'$unwind': '$doc'
},
{ # last projection, I promise
'$project': {
'_id': '$doc.id',
'pkey': '$doc.pkey',
'_code': '$doc._code',
'date_created': '$doc.date_created',
'sender_full_name': '$doc.sender_full_name',
'sender_raw_address': '$doc.sender_raw_address',
'sender_formatted_address': '$doc.sender_formatted_address',
'receiver_full_name': '$doc.receiver_full_name',
'receiver_raw_address': '$doc.receiver_raw_address',
'receiver_formatted_address': '$doc.receiver_formatted_address',
'status_name': '$doc.status_name',
'team_value': '$doc.team_value',
'cs_name': '$doc.cs_name',
'fk_messenger_id': '$doc.shipment_status_history.fk_shipment_id'
}
},
]
res = db.db_shipment.aggregate(pipeline)
关于python - Pymongo 聚合多个条件 : lookup, unwind, redact, cond, sort and limit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49629011/
我有一个从 A View Controller 到 B View Controller 的 unwind segue。 在B中做了一个网络操作,操作完成后,响应会显示在A View Controlle
我刚刚意识到,在当前的 Xcode 8 beta 6 中,当我将展开操作连接到例如模态呈现的 View Controller 中的条形按钮项目以展开模态呈现转场并呈现 View Controller
我是 mongodb 聚合的新手。我的 mongo 文档有很多数组。我需要将其导出为平面文件。为此,我需要构建它。我尝试了以下聚合: [ {$unwind : "$items" }, {$unwind
我正在尝试使用 De Bruijn 指数定义 lambda 演算项。我在 OS X 上使用 swi prolog。 如果我使用自然数的 zero|successor 表示,我可以交互式地完成部分指定的
我是 mongodb 聚合的新手。我的 mongo 文档有很多数组。我需要将其导出为平面文件。为此,我需要构建它。我尝试了以下聚合: [ {$unwind : "$items" }, {$unwind
有了这些数据: { "_id" : ObjectId("576948b4999274493425c08a"), "virustotal" : { "scan_id" :
我想要$unwind 2 个字段,school 和home。数据库结构是这样的; { "id" : 1, "school" : [ { "pat
考虑这组测试结果: [{ _id: ObjectId(...), name: "Test1", acts: [ { name: "act1",
我想要 go 中的结果,因为 mongo shell 提供给我。 在 mongo shell 中数据是这样的: db.user.aggregate([{$unwind:"$user"}]).prett
这个问题 - Is it possible to get a slice of a slice in Mongo?涵盖了如何在 Mongo 中获取切片。简而言之,使用聚合链来$unwind、$skip
我有一个用户集合,其中每个文档具有以下结构: { "_id": "", "login": "xxx", "solved": [ { "problem": "",
在 MongoDB 聚合框架中,我希望在对象(即 JSON 集合)上使用 $unwind 运算符。看起来不像是 possible ,有解决方法吗?有计划实现吗? 例如,从聚合 documentatio
假设我有一个名为节点的参数: "nodes": [ { "name": "John", "age": 18.0, "label": "Person",
我的文档有一个字段symptoms,它是一个数组的数组。 我想$unwind它并应用$addToSet删除重复项, 然后只需更新文档即可。怎么做 ? 文档 "symptoms": [ [
我正在编写一个非常简单的应用程序,它有两个 View Controller - FirstVC 和 SecondVC。在 FirstVC 上,我加载了一个视频 (apples.mp4),它在后台(在我
我在想,在聚合管道中为嵌套数组的文档使用 $unwind 运算符是否会以与数组中项目的顺序相同的顺序返回解构的文档。例子:假设我有以下文件 { "_id" : 1, "item" : "foo", v
我有一份教育机构文件,看起来像这样: { name: ..., addresses: [...], courses: [ {name: ... , duration: ..., tags[...]}
使用 Storyboard这非常容易。您只需将操作拖至“退出”即可。但我应该如何从我的代码中调用它? 最佳答案 创建手动转场(ctrl-从文件所有者拖动到退出), 在绿色 EXIT 按钮下方的左侧 C
iOS 6 和 Xcode 4.5 有一个称为“Unwind Segue”的新功能: Unwind segues can allow transitioning to existing instanc
我有一个 Storyboard,它有一个起始 View Controller ,它呈现其他模态视图 Controller 。 假设 View Controller A 是起始 View Control
我是一名优秀的程序员,十分优秀!