在猫鼬中获得不同的价值观mongoDB尽管使用相同的语法

时间:2017-11-20 10:04:39

标签: json node.js mongodb mongoose

我在mongoose和mongo shell中使用相同的语法,但两者都返回不同的值

以下是我的主要数据

      "username" : "developer2",
    "createdProjects" : [ ],
    "registeredClasses" : [ ],
    "friendRequest" : [
            {
                    "id" : ObjectId("5a114dede58f4a05cb135d96"),
                    "username" : "chirag",
                    "_id" : ObjectId("5a114dfee58f4a05cb135d97"),
                    "Color" : "green",
                    "Status" : "Friend"
            }
    ],
    "messages" : [
            {
                    "id" : ObjectId("5a109488b5454805a94f74ab"),
                    "User" : "Sting",
                    "_id" : ObjectId("5a114d51e58f4a05cb135d91"),
                    "texts" : [
                            {
                              "username" : "Sting",
                              "message" : "message",
                             "_id"ObjectId("5a114d51e58f4a05cb135d93")
                            },
                            {
                                    "username" : "developer2",
                                    "message" : "developer 2",
                             "_id"ObjectId("5a114dbbe58f4a05cb135d94")
                            }
                    ]
            },
            {
                    "id" : ObjectId("5a114dede58f4a05cb135d96"),
                    "User" : "chirag",
                    "_id" : ObjectId("5a114e26e58f4a05cb135d9a"),
                    "texts" : [
                            {
                             "username" : "developer2",
                             "message" : "hi chira",
                             "_id"ObjectId("5a114e26e58f4a05cb135d9c")
                            },
                            {
                                    "username" : "chirag",
                                    "message" : "hi developer",
                             "_id"ObjectId("5a114e40e58f4a05cb135d9f")
                            }
                    ]
            }
    ],
    "friends" : [
            {
                    "username" : "Sting",
                    "_id" : ObjectId("5a114d38e58f4a05cb135d8f")
            },
            {
                    "username" : "chirag",
                    "_id" : ObjectId("5a114e16e58f4a05cb135d98")
            }
    ]

这是我的mongo代码[工作绝对正常]

 db.users.find({username:"chirag"},
  {messages: 
   { $elemMatch: 
    { User: 
      "developer2" } }})

返回以下json数据

   {
    "_id" : ObjectId("5a114dede58f4a05cb135d96"),
    "messages" : [
            {
                    "id" : ObjectId("5a114c66e58f4a05cb135d8c"),
                    "User" : "developer2",
                    "_id" : ObjectId("5a114e26e58f4a05cb135d9b"),
                    "texts" : [
                            {
                             "username" : "developer2",
                             "message" : "hi chira",
                            "_id":ObjectId("5a114e26e58f4a05cb135d9d")
                            },
                            {
                              "username" : "chirag",
                              "message" : "hi developer",
                            "_id":ObjectId("5a114e40e58f4a05cb135d9e")
                            }
                    ]
            }
    ]
}

这正是我想要的 ,但是当我在mongoose中使用相同的方法时,它会返回不同的值

   User.find({username:req.user.username},{messages:
{ $elemMatch: { 
  User:req.params.username} }},function(err,data){
    if (err) {
      throw err;
   } else {
    res.render("chat",{texts:data,user:founduser});
   }
  }) 

在数据

中返回此值
  { _id: 5a114dede58f4a05cb135d96,
     createdProjects: [], 
    registeredClasses: [],
    friendRequest: [],
    messages: [ { id: 5a114c66e58f4a05cb135d8c,
              User: 'developer2',
             _id: 5a114e26e58f4a05cb135d9b,
              texts: [Array] } ],
    friends: [] }

我第一个问题就是返回正确的数据以及我甚至没有要求的数据 和[Array]形式的文本,如何从中提取信息 请指出我在这里失踪的内容

1 个答案:

答案 0 :(得分:0)

Mongoose默认为您提供完整的匹配文档,  如果要选择所需的信息,请使用projection

示例:

// find each person with a last name matching 'Ghost',
//  selecting the `name` and `occupation` fields
Person.findOne({
  'name.last': 'Ghost',
}, 'name occupation', function (err, person) {
  ...
})