查找在对象内查找的文档

时间:2014-09-03 08:01:39

标签: node.js mongodb

我有这个文件:

{
  "_id": ObjectId("xxx"),
  "props": {
     "a": "a1",
     "b": "b2"
   }
}

我的查询如下:

db.collection.find({"$and": [ {"props.a" : "a1"}, {"props.b": "b2"} ]}

我从GET值中获取查询的元素:

/api/search?a=a1&b=b1

所以,我需要一种从GET对象开始生成我的查询的方法......

我想到了这样的事情:

// Little helper to get the object key name by index
Object.prototype.key = function key(int) { var j = -1; for(var i in this) { j++; if(j==int) { return i; } else { continue; } } }

// My attempt
var query = [],
    i     = 0;

_.each(req.query, function(prop) {

    var key = req.query.key(i);

    query.push({"props." + key: prop});

    i = i + 1;

});

但它不起作用......

如果我这样做:

_.each(req.query, function(prop) {

    var key = {};
    key.properties = {};
    key.properties[req.query.key(i)] = prop ;
    props.push(key);
    i = i + 1;

});

我明白了:

 [{ props: { a: 'a1' } }, { props: { b: 'b1' } } ]

但是通过这种方式我只能得到这个查询:

db.collection.find({"$and": [ { props: { a: 'a1' } }, { props: { b: 'b1' } } ]}

这与我上面写的完全不同(这个搜索的道具与我提供的道具完全相同,而原始版本则查找包含其中一个值的道具)

我该怎么办?

1 个答案:

答案 0 :(得分:0)

好的我找到了一个解决方案,在google上搜索没有返回任何解决方案......

var query = {"$and": []},
        props = [],
        i     = 0;

_.each(req.query, function(prop) {

    var key = {};
    key["properties." + req.query.key(i)] = prop ;
    props.push(key);
    i = i + 1;

});

query.$and = props;

这样生成的查询就像我需要的那样。