簡體   English   中英

MongoDB查詢到數組數組

[英]MongoDB query into an array of arrays

我的數據庫中包含以下架構:

{ name: 'AFG',
  documents: [
    { name: 'doc1',
      templates: [
        { name: 'templ1',
          lastModified: <Date>},
        ...]
    },
    ...]
}

我正在嘗試查詢以查找名稱為'templ1'的模板。 如果找到它,則必須將上次修改日期與另一個修改日期進行比較並更新值。 如果找不到,則必須將其推入陣列。

我嘗試使用以下查詢進行操作:

Country.findOne({name : countrySelected, documents : {$elemMatch: {name: documentSelected}}, 'documents.templates' : {$elemMatch: {name: templateSelected}}}, function(err, templateFound){...}

但是我收到以下錯誤:

MongoError: cannot use the part (documents of documents.templates) to traverse the element ({documents: [ { name: "Passport", templates: [] }, { name: "Visa", templates: [] }, { name: "Driver's Licence", templates: [] }, { name: "Id Card", templates: [] }, { name: "Other", templates: [] } ]})

有人知道我該怎么辦? 謝謝!!

您必須使用$in運算符在數組中搜索。

Country.findOne({
    name : countrySelected, 
    documents: {
        $elemMatch: {
            $and: [{
                name: {
                    $in: documentSelected //<-- must be array like ['doc1']
                }
            }, {
                'templates.name': {
                    $in: documentSelected //<-- must be array like ['tmpl1']
                 }
            }]
        }
    }
}, function(err, templateFound){
    //do something with err and templateFound
});

要更新LastModified日期,您需要在回調函數中對其進行更新並保存文檔。

請參閱此答案以獲取嵌套數組更新

暫無
暫無

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

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