Mongoid - 在嵌入式文档中同时满足两个查询条件?
Mongoid - two query conditions to both be met in an embedded doc?
我有两个模型
class User
include Mongoid::Document
include Mongoid::Timestamps
field :username
embeds_many :user_tags
end
class UserTag
include Mongoid::Document
field :name
field :like_count, :type => Integer, :default => 0
embedded_in :user
end
我想查询所有 user_tag 名为 "nyc" 且 user_tag "nyc" 的 like_count > 10 的用户。我尝试了以下方法:
users = User.where('user_tags.name' => "nyc").and('user_tags.like_count' => {'$gte' => 10 })
从逻辑上讲,这是它应该做的,但不是我需要它做的。它 returns 用户拥有 user_tag "nyc" 并且拥有任何 user_tag like_count >= 10。我需要拥有 user_tag 的用户"nyc" user_tag "nyc" 的 like_count >= 10.
我该怎么做?我是 运行 mongoid 4.0.2.
也许你应该这样写:
users = User.where('user_tags.name' => "nyc", 'user_tags.like_count' => {'$gte' => 10 })
Mongoid 将尝试查找满足这两个条件的文档。
你可以试试这个
users = User.where('user_tags.name' => "nyc").where('user_tags.like_count' => {'$gte' => 10 }).all
或
users = User.where('user_tags.name' => "nyc", 'user_tags.like_count' => {'$gte' => 10 }).all
实际上,您的查询不符合您要达到的目的。它转换为以下 MongoDB 查询:
db.users.find({'user_tags.name': 'nyc' }, {'user_tags.like_count': {$gte: 10}})
这意味着 MongoDB 将找到符合这两个条件的所有文档。 Mongoid 返回相同的数据,如 MongoDB.
您需要的是以下 MongoDB 查询:
db.users.find({ user_tags: {
$elemMatch: {
name: 'nyc',
like_count: { $gte: 10 }
}
}})
使用 Mongoid 你可以写:
User.where(user_tags: {
'$elemMatch' => {
name: 'nyc',
like_count: { '$gte' => 10 }
}
}).count
我有两个模型
class User
include Mongoid::Document
include Mongoid::Timestamps
field :username
embeds_many :user_tags
end
class UserTag
include Mongoid::Document
field :name
field :like_count, :type => Integer, :default => 0
embedded_in :user
end
我想查询所有 user_tag 名为 "nyc" 且 user_tag "nyc" 的 like_count > 10 的用户。我尝试了以下方法:
users = User.where('user_tags.name' => "nyc").and('user_tags.like_count' => {'$gte' => 10 })
从逻辑上讲,这是它应该做的,但不是我需要它做的。它 returns 用户拥有 user_tag "nyc" 并且拥有任何 user_tag like_count >= 10。我需要拥有 user_tag 的用户"nyc" user_tag "nyc" 的 like_count >= 10.
我该怎么做?我是 运行 mongoid 4.0.2.
也许你应该这样写:
users = User.where('user_tags.name' => "nyc", 'user_tags.like_count' => {'$gte' => 10 })
Mongoid 将尝试查找满足这两个条件的文档。
你可以试试这个
users = User.where('user_tags.name' => "nyc").where('user_tags.like_count' => {'$gte' => 10 }).all
或
users = User.where('user_tags.name' => "nyc", 'user_tags.like_count' => {'$gte' => 10 }).all
实际上,您的查询不符合您要达到的目的。它转换为以下 MongoDB 查询:
db.users.find({'user_tags.name': 'nyc' }, {'user_tags.like_count': {$gte: 10}})
这意味着 MongoDB 将找到符合这两个条件的所有文档。 Mongoid 返回相同的数据,如 MongoDB.
您需要的是以下 MongoDB 查询:
db.users.find({ user_tags: {
$elemMatch: {
name: 'nyc',
like_count: { $gte: 10 }
}
}})
使用 Mongoid 你可以写:
User.where(user_tags: {
'$elemMatch' => {
name: 'nyc',
like_count: { '$gte' => 10 }
}
}).count