복붙노트

[MONGODB] 어떻게 몽고에서 포스트 태그를 구현하는 방법?

MONGODB

어떻게 몽고에서 포스트 태그를 구현하는 방법?

나는 SO-같은 애완 동물 프로젝트를 만들기 위해 몽고와 놀겠다는거야, 그리고 난 후 태그를 구현하고자합니다. 각 태그는 이름과 슬러그 (문자열 URL의 ID로 사용되는)을 가지고 있으며, 게시물이 여러 개의 태그가 있습니다. 나는 "태그 B가없는, 태그 A를 가지고 찾을 포스트"와 같은 쿼리를 만들 수 있도록하고 싶습니다, 나는이 작업을 수행 할 수있는 몽고-방법 궁금 해요.

한 가지 방법은 각 게시물에 태그 ID의 배열을 저장하는 것입니다 - 이것은 쉽게 쿼리 말했다하게되지만, 태그 이름과 슬러그를 얻기 위해 각 게시물에 대한 별도의 하나가 필요합니다. 또 다른 방법은 각 게시물 [태그 이름, 태그 슬러그]의 배열을 저장하는 것입니다,하지만 난 확실히 내가 발견에 그 정보를 사용할 수있을 것 아니에요.

몽고에 대한 더 나은 작동합니다 다른 방법이 있나요? 나는이 수행 할 수 있습니다 방법에 대한 조언을 감사하겠습니다 그래서 나는, NoSQL에 새로운 해요. 또한, 나는 PHP 바인딩을 사용하고,하지만 그건 문제가되지 아마해야한다.

해결법

  1. ==============================

    1.당신이 사용하는 태그와 각각의 슬러그가 변화하지 않을 경우, 나는 두 번째 접근 방식은 더 나은 하나라고 생각합니다. 이 예 포스트 문서로 태그를 생성하여 하위 필드 명시 할 오히려 [슬러그 명]의 배열을 저장하지 - 단 I은 작은 변화를 제안

    당신이 사용하는 태그와 각각의 슬러그가 변화하지 않을 경우, 나는 두 번째 접근 방식은 더 나은 하나라고 생각합니다. 이 예 포스트 문서로 태그를 생성하여 하위 필드 명시 할 오히려 [슬러그 명]의 배열을 저장하지 - 단 I은 작은 변화를 제안

    {
        "_id" : ObjectId("4ee33229d8854784468cda7e"),
        "title" : "My Post",
        "content" : "This is a post with some tags",
        "tags" : [
            {
                "name" : "meta",
                "slug" : "34589734"
            },
            {
                "name" : "post",
                "slug" : "34asd97x"
            },
        ]
    }
    

    할 수 있습니다 다음과 같은 점 표기법을 사용하여 특정 태그를 가진 게시물에 대한 쿼리 :

    db.test.find({ "tags.name" : "meta"})
    

    태그 배열이기 때문에, 몽고는 배열의 요소가 아닌 전체 배열에 대한 쿼리와 일치하는 영리한 충분히이며, 도트 표기법을 사용하면 특정 필드에 일치시킬 수 있습니다.

    특정 태그를 포함하지 않는 게시물에 대한 조회하려면, $ NE를 사용 :

    db.test.find({ "tags.name" : { $ne : "fish" }})
    

    그리고 하나 개의 태그가 아닌 다른, 사용 $과가 포함 된 게시물에 대한 쿼리 :

    db.test.find({ $and : [{ "tags.name" : { $ne : "fish"}}, {"tags.name" : "meta"}]})
    

    도움이 되었기를 바랍니다!

  2. from https://stackoverflow.com/questions/8455685/how-to-implement-post-tags-in-mongo by cc-by-sa and MIT license