代码之家  ›  专栏  ›  技术社区  ›  João Otero

Mongoose:使用findOne()查询嵌套数组并向外投影

  •  0
  • João Otero  · 技术社区  · 7 年前

    我收集了以下结构的文件:

    city = {
        "_id" : ObjectId("5b7b9eac23cad92dbd81f92b"),
        "stores" : [
            {
                "name" : "someName",
                "storeId" : "5b9350dc97c35614731e03df"
            }
         ]
    }
    

    如何按storeId查询收集城市,并使用findOne()获取Mongoose中的城市对象?

    我尝试了以下方法,但在这两种方法中我都得到了“null”

    query = {
       'stores.storeId' : someId
    }
    
    query = {
       'stores': {'$elemMatch': {'storeId': someId}}
    }
    
    Cities.findOne(query)
    .then( city => {
       console.log('city: '+ city);
    });
    

    然后我试着只说出名字。 我考虑过使用:

    options = {
       select: { 'stores.$.name': 1 }
    }
    
    Cities.findOne(query, {}, options)
    .then( name => {
       console.log('name: '+ name);
    });
    

    但我不知道它是否有效,因为我甚至还没有成功地查询它。。。

    1 回复  |  直到 7 年前
        1
  •  0
  •   João Otero    7 年前

    我发现了错误: ...在数据库中,storeId被保存为字符串,而不是ObjectId,但在模式中,它被设置为mongoose。模式。类型。目标。当我将模式更改为字符串时,找到了文档。