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
});
我正在使用 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
});