Mongodb在数组中找到一个值

时间:2014-03-28 08:54:15

标签: mongodb mongodb-query sails.js

如果我有这个架构......

person = {
emails : Array
}

这些值存储在电子邮件数组中,如下所述:

emails : [{ a : "a@a.com" , b: "b@b.com" , c : "c@c.com" }]

现在我尝试了下面提到的查询,

 Person.findOne({emails : "a@a.com"}).exec(function(err,person){

 });

Mongodb原生查询

Person.native(function(err,collection){

collection.find( emails : { "$in" : "a@a.com"} , function(err , result){
    //code
 });

});

编辑问题

现在我尝试使用OR,如下所示。

Person.findOne({ 
"or": [ 
    {"emails.a": "a@a.com" },
    {"emails.b": "a@a.com" },
    {"emails.c": "a@a.com" }
]
}, function(err,doc) { });

实际上,我必须检查" emails.a"有" a@a.com" ,如果不仅仅是,我必须找到" emails.b"或者" emails.c"有" a@a.com"。

如果" emails.a"有" a@a.com" ,那么doc应该返回输出。 否则搜索" a@a.com"继续" emails.b"或者" emails.c"。

我该怎么做?

但是我没有使用上述查询获得所需的输出。请帮忙。非常感谢。

1 个答案:

答案 0 :(得分:2)

您的数组包含一个包含abc键的子文档。为了匹配您想要的值,您需要指定此元素。

Person.findOne({ "emails.a": "a@a.com" }, function(err,doc) {

如果您希望在不同的字段中执行此操作,请将其与$or结合使用:

Person.findOne({ 
    "$or": [ 
        {"emails.a": "a@a.com" },
        {"emails.b": "a@a.com" },
        {"emails.c": "a@a.com" }
    ]
}, function(err,doc) {

请注意,这与“文档”匹配,而不仅仅是数组的成员。

另请参阅$elemMatch运算符以了解其用途。