如何使用NodeJS在MongoDB中检索特定查询的数组集合

时间:2015-04-17 12:34:51

标签: node.js mongodb

我刚试过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'
}
  ]
}

我在这里错过了什么吗?

注意:

  • 我正在使用Node MongoDB本机驱动程序

提前致谢:)

1 个答案:

答案 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")