复杂查询,不支持unionWith



如果我有一个对象Post有两个属性

  • Title类型string
  • 布尔型IsHomePage
  • boolean类型的IsTagged

当使用mongodb聚合框架和$unionWith时,我可以在一个DB往返中选择我需要的东西(所有文档中IsHomePage设置为true,其余的设置为IsTagged属性设置为true

db.collection.aggregate([
{
"$match": {
IsHomePage: true
}
},
{
"$unionWith": {
"coll": "collection",
"pipeline": [
{
"$match": {
IsHomePage: {
$ne: true
},
IsTagged: true
}
},
{
"$sample": {
"size": 50
}
}
]
}
}
])

我如何才能实现相同的旧MongoDB实例(那里有一个旧版本比4.4)。

注意:UnionWith在4.4版本中宣布。

查询
  • this可以做union做的事情,但是有facet的限制(每个结果数组<16 MB,第二个几乎是肯定的,因为$sample)

*如果它不是你想要的,如果你能给出样本数据和预期的结果写query + test。

PlayMongo

aggregate(
[{"$facet": 
{"home": [{"$match": {"$expr": {"$eq": ["$IsHomePage", true]}}}],
"notHome": 
[{"$match": 
{"$expr": 
{"$and": 
[{"$ne": ["$IsHomePage", true]}, {"$eq": ["$IsTagged", true]}]}}},
{"$sample": {"size": 50}}]}},
{"$project": {"union": {"$concatArrays": ["$home", "$notHome"]}}},
{"$unwind": {"path": "$union"}},
{"$replaceRoot": {"newRoot": "$union"}}])

相关内容

  • 没有找到相关文章

最新更新