MongoDB聚合:$match匹配一个文档或所有文档

6

我有一个参数化的mongodb聚合查询,其中该参数接收给定的ObjectID用于过滤,或者如果我想返回所有文档,则为NULL。我的意思是,我想使用相同的管道来返回一个或所有文档。

我的管道查询如下:

db.user.aggregate([
  {'$match': { _id : <MYUSERPARAM> } }
]);

MYUSERPARAM的值将拥有一个给定的ObjectId用于过滤或者如果我不想过滤单个文档并且希望返回所有文档,则会有一些值。

然后我的系统将替换MYUSERPARAM并运行查询,例如:

要过滤单个文档:

db.user.aggregate([
  {'$match': { _id : ObjectId("5e2b9ab8b1dbae5124e4b635") } }
]);

或者以某种方式返回所有文档:

db.user.aggregate([
  {'$match': { _id : $all } }
]);

但上述方法无效。

我该如何编写管道查询以过滤单个文档或更改查询中的单个值/参数来返回所有文档?与上述示例类似。

1个回答

13

听起来像是NoSQL注入:

db.user.aggregate([
  {'$match': { _id : {$ne: ""} } }
]);

or

db.user.aggregate([
  {'$match': { _id : {$exists: true} } }
]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接