Findone 的多个查询不工作猫鼬

Findone for multiple queries not working mongoose

我正在使用 mongoose 和 nodejs express 框架

这是 mongo 中的文档:

{                                                                        
        "_id" : ObjectId("59c1fe16b68d844d8473c6fe"),                    
        "is_active" : "0",                                               
        "membership_expiry_date" : ISODate("2018-09-20T05:35:18.485Z"),  
        "date_of_joining" : ISODate("2017-09-20T05:35:18.485Z"),         
        "user_name" : "Max M",                                         
        "first_name" : "Max",                                          
        "password" : "MyPwd",                                            
        "address" : "NewTown",                                         
        "email_id" : "max@gmail.com",                                    
        "phone_number" : "12345678901",                                    
        "books_borrowed" : [                                             
                {                                                        
                        "due_date" : ISODate("2017-09-22T05:35:18.511Z"),
                        "book_id" : "1234",                              
                        "is_renewed" : true,                             
                        "_id" : ObjectId("59c1fe16b68d844d8473c700")     
                },                                                       
                {                                                        
                        "due_date" : ISODate("2017-09-22T05:35:18.531Z"),
                        "book_id" : "1235",                              
                        "is_renewed" : false,                            
                        "_id" : ObjectId("59c1fe16b68d844d8473c6ff")     
                }                                                        
        ],                                                               
        "__v" : 0                                                        
}       

现在,当我尝试访问 books_borrowed 时,其中 user_name=Max 和 book_id=1234 我正在使用

model.findOne({"user_name":"Max M","book_id":1234}, {
        'books_borrowed': 1
    },
    function(err, res) {
        console.log("##Err:: " + JSON.stringify(err) + " response:: " + JSON.stringify(res));
        if (err) {
            return callback('Error while updating...');
        } else {
            return callback(null, res);
        }
    });

这个 returns 错误 = null 并且响应也为 null。

如果我用 'books_borrowed.book_id' 替换 book_id 那么我得到

{
  "_id": "59c1fe16b68d844d8473c6fe",
  "books_borrowed": [
    {
      "due_date": "2017-09-22T05:35:18.511Z",
      "book_id": "1234",
      "is_renewed": true,
      "_id": "59c1fe16b68d844d8473c700"
    },
    {
      "due_date": "2017-09-22T05:35:18.531Z",
      "book_id": "1235",
      "is_renewed": false,
      "_id": "59c1fe16b68d844d8473c6ff"
    }
  ]
}

其中还包含 book_id = 1235 的数据。

我只想要包含 book_id=1234 数据的对象。

我在这里错过了什么?此外,我不希望将这些对象 ID 插入到我的 books_borrowed 对象中。

您不能直接在查询中调用 book_id,因为它不在主文档中。您需要获取所有借来的书籍,然后过滤 "books_borrowed" 以获取所需的文档。

model.findOne({"user_name":"Max M","books_borrowed":{$elemMatch:{"book_id":"1234"}}, {
    'books_borrowed': 1
},
function(err, res) {
    // Your code here
});

您不能直接访问 book_id,因为它在数组中。 试试这个:

model.findOne({"user_name":"Max M", books_borrowed: {$elemMatch: {book_id:'1234'}}})

使用它来过滤 books_borrowed 结果

model.findOne({
    "user_name":"Max M",
    "books_borrowed": {
        $elemMatch: {"book_id": "1234"}
    }
}, 
{
    "user_name": 1,
    // ... as needed 
    "books_borrowed.$": 1
});