如何使用C#驱动程序正确构建MongoDB嵌套属性名称

时间:2012-10-24 10:22:57

标签: mongodb mongodb-.net-driver

我必须错过一些令人眼花缭乱的事情。有人请羞辱我;

我正在构建2.2聚合查询,C#Linq驱动程序本身不支持这些查询,因此我必须使用点分表示法为嵌套属性构建字符串化名称。说我有这样的结构;

    db.so.insert({
    a:1,
    b:2,
    n : {
        z:4,
        x:5,
        y: {
           v:"value",
        }
    }
});

因此,要引用“值”,我需要使用名称n.y.vn[y][v]。现在,因为我从Web客户端(http://www.demo.org/exampleQuery?field1=n&field2=y&field3=v)接收查询的字段属性名称,所以我需要构造属性名称;

var fieldNameForQuery = field1+"."+field2+"."+field3;

我显然对此感到紧张,所以当然我通过清理输入参数来防御NOSQL注入,但我更倾向于使用C#驱动程序代替。

我想我喜欢这样的东西;

MongoDB.Driver.BuildNestedFieldName(field1, field2, field3));

这基本上就是我自己编写的内容,但感觉就像一个kludge,我宁愿不保持以这种方式构建数据库安全字段名称的责任。

1 个答案:

答案 0 :(得分:0)

目前还没有能够做你想要的功能。但是,如果所有的功能都是“。”在中间,那么我们就没有解决注入问题,因为我们插入的东西不能被注入......注入问题可以通过确保来解决“field1”,“field2”和“field3”是字段名称的有效值。当然,根据http://bsonspec.org/#/specification,没有多少是无效的。我们唯一要检查的是字符串中没有2个空终止符。所以...这并没有给我们留下太多我们能做的事情。

这有意义吗?