我刚试过MongoDB& NodeJS并且在使用Nodejs查找特定数组集合方面存在问题。
以下是我的收藏品:
{
"_id": ObjectId("552aa4da6e25e57ebde7ac6f"),
"username": "blablabla",
"email": "xxx@gmail.com",
"password": "Dummy Trip",
"itinerary": [
{
"_id": ObjectId("552c109adb616795044a919e"),
"title": "test-0",
"desc": "test-0-desc"
},
{
"_id": ObjectId("552c10b0db616795044a91a0"),
"title": "test-1",
"desc": "test-1-desc"
},
{
"_id": ObjectId("552c1128db616795044a91a1"),
"title": "test-2",
"desc": "test-2-desc"
}
]
}
所以我需要找到一个具有“552c109adb616795044a919e”的目标的行程列表
在MongoDB终端中,我使用findOne命令&位置$运算符,它按预期工作,只显示我搜索的数组。
命令:
db.user.findOne({ "itinerary._id" : ObjectId("552c109adb616795044a919e") }, {"itinerary.$" : 1})
结果:
{
"_id" : ObjectId("552aa4da6e25e57ebde7ac6f"),
"itinerary" : [
{
"_id" : ObjectId("552c109adb616795044a919e"),
"title" : "test-0",
"desc" : "test-0-desc"
}
]}
但是为什么当我尝试在NodeJS中实现它时,它显示所有记录而不是我搜索的特定数组。
这是我的NodeJS:
var userCollection = db.get('user');
userCollection.findOne({ "itinerary._id" : new ObjectID("552c109adb616795044a919e") }, {"itinerary.$" : 1},function(e,userDocs){
console.log(userDocs);
});
NodeJS结果(显示所有结果):
{
_id: 552aa4da6e25e57ebde7ac6f,
username: 'blablabla',
email: 'xxx@gmail.com',
password: 'Dummy Trip',
itinerary: [
{
_id: 552c109adb616795044a919e,
title: 'test-0',
desc: 'test-0-desc'
},
{
_id: 552c10b0db616795044a91a0,
title: 'test-1',
desc: 'test-1-desc'
},
{
_id: 552c1128db616795044a91a1,
title: 'test-2',
desc: 'test-2-desc'
}
]
}
我在这里错过了什么吗?
注意:
提前致谢:)
答案 0 :(得分:-1)
我假设你的itinerary
是一个数组。然后你必须在mongodb中使用$elemMatch
。更多关于elemMatch的详细信息。
你可以尝试类似的东西。
var userCollection = db.get('user');
userCollection.findOne({ "itinerary": { $elemMatch: {_id: new ObjectID("552c109adb616795044a919e")}}}, {"itinerary.$" : 1},function(e,userDocs){
console.log(userDocs);
});
另外我认为对于匹配的对象ID,您可以使用mongoose.Types.ObjectId("552c109adb616795044a919e")