假设有一个User模型和一个Post模型。在这种情况下,用户的帖子会很多;用户将是父级,而邮政将是子级。是否可以直接查询帖子?

例如,如果我想做类似的事情

app.get('/post/search/:query', (req,res) => {
       Posts.find({title: req.params.query }, (err,post) => {
            res.send(JSON.stringify(post))
       })
})


还是必须要做:

app.get('/post/search/:query',(req,res) => {

  let resultsFromQuery = [];
  User.find({'post.title':req.params.query'}, (err,user) => {
       user.posts.forEach((post) => {
           if(post.title === req.params.query){
               resultsFromQuery.push(post);
           }
       })
  })
res.send(JSON.stringify(resultsFromQuery))


})

编辑:这是我的架构。

用户架构(父)

const mongoose = require('mongoose'),
    Schema = mongoose.Schema,
    PostSchema = require('./post.js');

let UserSchema = new Schema({
    username: {
        type: String,
        required: true,
        unique: true
    },
    password: {
        type: String,
        required: true
    },
    posts: [PostSchema]
})

module.exports = mongoose.model('User',UserSchema);


发布架构(子级)

const mongoose = require('mongoose'),
    Schema = mongoose.Schema;

let PostSchema = new Schema({
    title: {
        type: String
    },
    description: {
        type: String
    },
    image: {
        type: String
    },
    original_poster: {
        id: {
            type: String,
            required: true
        },
        username: {
            type: String,
            required: true
        }
    },
    tags: {
        type: [String],
        required: true
    }
})

module.exports = PostSchema;


编辑:

这是一个样本文件

db.users.find({username:'john'})的结果

{
    "_id" : ObjectId("5a163317bf92864245250cf4"),
    "username" : "john",
    "password" : "$2a$10$mvE.UNgvBZgOURAv28xyA.UdlJi4Zj9IX.OIiOCdp/HC.Cpkuq.ru",
    "posts" : [
        {
          "_id" : ObjectId("5a17c32d54d6ef4987ea275b"),
            "title" : "Dogs are cool",
            "description" : "I like huskies",
            "image" : "https://media1.giphy.com/media/EvRj5lfd8ctUY/giphy.gif",
            "original_poster" : {
                "id" : "5a163317bf92864245250cf4",
                "username" : "john"
            },
            "tags" : [
                "puppies",
                "dogs"
            ]
        }
    ],
    "__v" : 1
}

最佳答案

是的,您可以直接从用户模型中找到帖子标题。像波纹管

User.find({"posts.title": "Cats are cool"}, (err, users) => {
  if(err) {
    // return error
  }
  return res.send(users)
})


这将返回具有所有帖子的用户,而不仅仅是匹配的帖子标题。因此,要返回仅匹配的帖子标题,可以使用$位置运算符。喜欢这个查询

User.find({"posts.title": "Cats are cool"},
  {username: 1, "posts.$": 1}, // add that you need to project
  (err, users) => {
    if(err) {
      // return error
    }
    return res.send(users)
})


只返回匹配的帖子

10-06 05:24
查看更多