簡體   English   中英

Mongodb在數組中找到一個值

[英]Mongodb find a value inside the array

如果我有這個架構......

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應返回輸出。 否則在“emails.b”或“emails.c”中繼續搜索“a@a.com”。

我怎樣才能做到這一點?

但是我沒有使用上面的查詢獲得所需的輸出。 請幫忙。 非常感謝。

您的數組包含一個帶有鍵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運算符以了解它的用途。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM