#node.js #mongodb #mongoose
#node.js #mongodb #мангуст
Вопрос:
У меня есть такие данные
{
_id:ObjectId("")
c_id:ObjectId("")
assign_id:[{},{},...n{}]
}
{
_id:ObjectId("")
c_id:ObjectId("")
assign_id:[{},{},...n{}]
}
{
_id:ObjectId("")
c_id:ObjectId("")
assign_id:[{},{},...n{}]
}
{
_id:ObjectId("")
c_id:ObjectId("")
assign_id:[{},{},...n{}]
}
{
_id:ObjectId("")
c_id:ObjectId("")
assign_id:[{},{},...n{}]
}
То, что я пытаюсь получить здесь, — это ровно 10 записей в каждом вызове, которые я получаю, когда у меня есть такие данные ( assign_id
есть ровно 1 запись)
{
_id:ObjectId("")
c_id:ObjectId("")
assign_id:[{}]
}
{
_id:ObjectId("")
c_id:ObjectId("")
assign_id:[{}]
}
{
_id:ObjectId("")
c_id:ObjectId("")
assign_id:[{}]
}
{
_id:ObjectId("")
c_id:ObjectId("")
assign_id:[{}]
}
{
_id:ObjectId("")
c_id:ObjectId("")
assign_id:[{}]
}
Постановка задачи
Я хочу ровно 10 записей в каждом вызове, которые включают количество присваиваемых идентификаторов
Например, допустим, у меня есть что-то вроде этого
{
_id:ObjectId("")
c_id:ObjectId("")
assign_id:[{},{},{},{},{},{},{},{},{},{}]
}
{
_id:ObjectId("")
c_id:ObjectId("")
assign_id:[{},{},{},{},{},{},{}]
}
Теперь, если я запрашиваю, мне нужна только первая запись, потому что в ней установлено ровно 10 записей ( assign_id
: Имеет 10 объектов).
Текущий запрос
db.find(condition)
.limit(parseInt(count))
.skip(parseInt(skip))
Я также пытаюсь использовать этот код
db.find(condition,
{assign_id:{$slice:[parseInt(skip),parseInt(count)]}})
Но не сработало, пожалуйста, помогите и простите меня за длинное объяснение.
Ответ №1:
Вы можете сделать это с помощью aggregate()
метода,
$unwind
деконструироватьassign_id
массив$sort
_id
или вы можете указать поле, если хотите другое, порядок, который вы можете установить в соответствии с вашим требованием 1 (по возрастанию), -1 (по убыванию),- установить
$skip
и$limit
$group
по_id
, реконструироватьassign_id
поле$sort
с помощью_id
вы можете установить в соответствии с вашими требованиями
db.collection.aggregate([
{ $unwind: "$assign_id" },
{ $sort: { _id: 1 } },
{ $skip: 0 },
{ $limit: 10 },
{
$group: {
_id: "$_id",
c_id: { $first: "$c_id" },
assign_id: { $push: "$assign_id" }
}
},
{ $sort: { _id: 1 } }
])