如何从mongo数据库的集合中获取具有特定键和值的关键结果?

时间:2016-07-12 12:41:12

标签: mongodb

假设我们有一个名为帖子

的集合
@Entity
public class Cookbook {
    private Integer id;
    private String title;
    private Collection<CookbookRecipe> cookbookRecipes;
    private Collection<CookbookSortlevel> cookbookSortlevels;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @Basic
    @Column(name = "title")
    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Cookbook cookbook = (Cookbook) o;

        if (id != null ? !id.equals(cookbook.id) : cookbook.id != null) return false;
        if (title != null ? !title.equals(cookbook.title) : cookbook.title != null) return false;

        return true;
    }

    @Override
    public int hashCode() {
        int result = id != null ? id.hashCode() : 0;
        result = 31 * result + (title != null ? title.hashCode() : 0);
        return result;
    }

    @OneToMany(mappedBy = "cookbook", fetch = FetchType.EAGER)
    public Collection<CookbookRecipe> getCookbookRecipes() {
        return cookbookRecipes;
    }

    public void setCookbookRecipes(Collection<CookbookRecipe> cookbookRecipes) {
        this.cookbookRecipes = cookbookRecipes;
    }

    @OneToMany(mappedBy = "cookbook")
    public Collection<CookbookSortlevel> getCookbookSortlevels() {
        return cookbookSortlevels;
    }

    public void setCookbookSortlevels(Collection<CookbookSortlevel> cookbookSortlevels) {
        this.cookbookSortlevels = cookbookSortlevels;
    }
}

@Entity
@Table(name = "cookbook_recipe", schema = "", catalog = "")
public class CookbookRecipe {
    private Integer id;
    private Recipe recipe;
    private Cookbook cookbook;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        CookbookRecipe that = (CookbookRecipe) o;

        if (id != null ? !id.equals(that.id) : that.id != null) return false;

        return true;
    }

    @Override
    public int hashCode() {
        int result = id != null ? id.hashCode() : 0;
        return result;
    }

    @ManyToOne
    @JoinColumn(name = "recipe_id", referencedColumnName = "id")
    public Recipe getRecipe() {
        return recipe;
    }

    public void setRecipe(Recipe recipe) {
        this.recipe = recipe;
    }

    @ManyToOne
    @JoinColumn(name = "cookbook_id", referencedColumnName = "id", nullable=false,insertable=false,updatable=false )
    public Cookbook getCookbook() {
        return cookbook;
    }

    public void setCookbook(Cookbook cookbook) {
        this.cookbook = cookbook;
    }
}


@Entity
public class Recipe {
    private Integer id;
    private String title;
    private String text;

    private Collection<RecipeIngredient> recipeIngredients;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @Basic
    @Column(name = "title")
    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    @Basic
    @Column(name = "text")
    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Recipe recipe = (Recipe) o;

        if (id != null ? !id.equals(recipe.id) : recipe.id != null) return false;
        if (title != null ? !title.equals(recipe.title) : recipe.title != null) return false;
        if (text != null ? !text.equals(recipe.text) : recipe.text != null) return false;

        return true;
    }

    @Override
    public int hashCode() {
        int result = id != null ? id.hashCode() : 0;
        result = 31 * result + (title != null ? title.hashCode() : 0);
        result = 31 * result + (text != null ? text.hashCode() : 0);
        return result;
    }

    @OneToMany(mappedBy = "recipe")
    public Collection<RecipeIngredient> getRecipeIngredients() {
        return recipeIngredients;
    }

    public void setRecipeIngredients(Collection<RecipeIngredient> recipeIngredients) {
        this.recipeIngredients = recipeIngredients;
    }
}

假设我们在mysql中有相同的表。 我希望将相同的sql结果查询到mongo。

查询是:{ "_id": ObjectId("5146bb52d8524270060001f3"), "post_text":"This is a sample post" , "user_name": "mark", "post_privacy": "public", "post_likes_count": 0 } 我们如何在mongodb中获得相同的结果?

1 个答案:

答案 0 :(得分:-1)

<强>答:

db.posts.find({user_name:"mark"},{post_likes_count,_id:0}).pretty();

注意默认情况下,MongoDB会返回每个find语句的_id字段。如果我们不希望在结果集中使用此字段,则必须在要检索的列列表中指定带有0值的_id键。键的0值表示我们要从结果集中排除此字段