programing

Mongoose(MongoDB)를 사용하여 중첩된 문서 쿼리

skycolor 2023. 5. 7. 11:19
반응형

Mongoose(MongoDB)를 사용하여 중첩된 문서 쿼리

저는 mongodb로 시작해서 중첩된 문서를 쿼리하는 데 어려움을 겪고 있습니다.두 가지 스키마가 있습니다.

var LinkSchema = new mongoose.Schema({
    url: String,
    name: String
});

var UserSchema = new mongoose.Schema({
    name: String,
    links: [LinkSchema]
});

보시다시피, 저는 간단한 북마크 도구를 만들고 있습니다.각 사용자는 이름과 링크 모음을 가집니다.각 링크에는 이름과 URL이 있습니다.

예를 들어, 링크가 다른 사용자의 링크 배열에 이미 있는지 확인합니다.다음과 같은 작업을 수행할 수 있습니다(블라드의 링크 컬렉션을 가져온 다음 쿼리 링크가 이미 컬렉션에 속해 있는지 확인).

app.get("/:query", function(req, res){
  User.findOne({"name":"vlad"}, function(err, user){
    user.links.find({"url":req.params.query}, function(err, foundLinks){
      if(foundLinks){
        res.send("link already exists!");
      } else {
        res.send("link doesn't exist!");
      }
    });
  });
});

물론 이 코드는 작동하지 않습니다. 왜냐하면 "user.links.find()"를 수행할 수 없기 때문입니다.user.links.map을 수행하여 URL만 추출한 다음 이에 대해 멤버쉽 쿼리를 실행할 수 있습니다.하지만 저는 이것이 올바른 해결책과는 거리가 멀다고 생각합니다.DB 쿼리를 기본적으로 사용하여 이와 같은 작업을 수행할 수 있는 방법이 있을 것입니다.누가 도와줄 수 있나요?감사해요!

다음과 같이 mongoose에 포함된 문서를 쿼리할 수 있습니다.

   User.find({'links.url':req.params.query}, function(err, foundUsers){
      // ---
   });

그리고 사용자 "filename"에 속하는 링크를 찾으려면 다음과 같이 쓸 수 있습니다.

   User.find({name:'vlad','links.url':req.params.query}, function(err, foundUsers){
      // ---
   });

이 정도면 효과가 있을 겁니다.

특정 사용자에게 속한 특정 링크를 찾으려면 다음 작업을 수행합니다.

User.find({name:'vlad','links.url':req.params.query}, { 'links.$': 1 },  function(err, foundUsers){
      // ---
   });

언급URL : https://stackoverflow.com/questions/13097266/querying-nested-documents-using-mongoose-mongodb

반응형