Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从自定义查询对象中筛选mongodb作为输入_Mongodb_Filter - Fatal编程技术网

从自定义查询对象中筛选mongodb作为输入

从自定义查询对象中筛选mongodb作为输入,mongodb,filter,Mongodb,Filter,我正在尝试从输入列表中按id和版本筛选搜索结果。如果未提供版本,则获取该ID的最新版本。当我同时拥有ID和版本时,下面的查询将起作用。但是,对于id:2,我只需要返回最新的id db.mycollection.find({ $or: [ { id: 1, version: 1 }, { id : 1, version: 2 }, { id : 2, versio

我正在尝试从输入列表中按id和版本筛选搜索结果。如果未提供版本,则获取该ID的最新版本。当我同时拥有ID和版本时,下面的查询将起作用。但是,对于id:2,我只需要返回最新的id

db.mycollection.find({
$or: [
    {
        id: 1,
        version: 1
    },
    {
        id : 1,
        version: 2
    },
    {
        id : 2,
        version: {$max: "$version"} // get the latest version if not provided
    }
]})
我得到下面的错误

{
"message" : "unknown operator: $max",
"ok" : 0,
"code" : 2,
"codeName" : "BadValue",
"name" : "MongoError"}

使用facet的聚合查询可以获取两种不同条件下的文档:

db.myCollection.aggregate( [
  { $facet: {
     with_version: [
          { $match: { $or: [ { id: 1, version: 1 }, { id: 3, version: 2 } ] } },
     ],
     without_version: [
          { $match: { id: 2 } },
          { $sort: { version: -1 } },
          { $limit: 1 },
     ],
  } },
  { $project: { docs: { $concatArrays: [ "$with_version", "$without_version" ] } } },
  { $unwind: "$docs" },
  { $project: { _id: "$docs._id", id: "$docs.id", version: "$docs.version" } },
] )
使用以下文档作为输入:

{ "_id" : "a", "id" : 1, "version" : 1 }
{ "_id" : "b", "id" : 2, "version" : 1 }
{ "_id" : "c", "id" : 3, "version" : 2 }
{ "_id" : "d", "id" : 2, "version" : 2 }
{ "_id" : "e", "id" : 4, "version" : 2 }
{ "_id" : "f", "id" : 3, "version" : 1 }
{ "_id" : "g", "id" : 3, "version" : 0 }
{ "_id" : "h", "id" : 2, "version" : 0 }
结果显示了
{id:1,version:1}
{id:3,version:2}
的匹配文档,以及
id:2
的最大版本号

{ "_id" : "a", "id" : 1, "version" : 1 }
{ "_id" : "c", "id" : 3, "version" : 2 }
{ "_id" : "d", "id" : 2, "version" : 2 }

尝试了下面的查询
db.mycollection.aggregate([{$match:{$or:[{id:1,版本:1},{id:1,版本:2},{id:2,版本:“$version”}},{$group:{u id:“$id”,“版本:{$max”:“$version”}}}}])
只得到了一个doc`{u id:1,“version:2}`的输出,我发布了一个答案。请告诉我结果是预期的还是其他的。谢谢发帖。我希望结果是三份文件。我将尝试下面的一个。这是否支持
查询中的多个ID而无需\u版本
查询?如果未找到5和7,则返回2上的多个文档<代码>db.myCollection.aggregate([{$facet:{with_version:[{$match:{$or:[{“id”:1,“version”:1},{“id”:3,“version”:2}}}},],无_版本:[{$match:{“id”:{$in:[2,5,7]},{$sort:{$version:{$1},{$limit 3},},},},{$project:{$docs:{$concatarray:[$with_version:{$match:},},},},},{$docs:{$inc{$project:{{u id:$docs.\u id',id:$docs.id',version:$docs.version}}])这样做有效。谢谢<代码>db.myCollection.aggregate([{$facet:{with_version:[{$match:{$or:[{“id”:1,“version”:1},{“id”:3,“version”:2}]},],无{u version:[{$match:{“id”:{$in:[2,5,7]},{$sort:{$version:-1},{$group:{$id:{“uniqueId:{uniqueId:“$id:”,“doc first:{$first”:“$$CURRENT”}}}},{$replaceRoot:{“newRoot”:“$doc”}],}},{$project:{docs:{$concatarray:[“$without_version”,“$without_version”]}}},{$unwind:$docs”},{$code>