我想在mongodb中使用正则表达式在数组内部进行查询,这些集合包含如下文档:
{
"_id" : ObjectId("53340d07d6429d27e1284c77"),
"company" : "New Company",
"worktypes" : [
{
"name" : "Pompas",
"works" : [
{
"name" : "name 2",
"code" : "A00011",
"price" : "22,22"
},
{
"name" : "name 3",
"code" : "A00011",
"price" : "22,22"
},
{
"name" : "name 4",
"code" : "A00011",
"price" : "22,22"
},
{
"code" : "asdasd",
"name" : "asdads",
"price" : "22"
},
{
"code" : "yy",
"name" : "yy",
"price" : "11"
}
]
},
{ …Run Code Online (Sandbox Code Playgroud) 我想从我的数据库中的集合中检索字段的区域值.该distinct命令是显而易见的解决方案.问题是某些字段具有大量可能的值并且不是简单的原始值(即,复杂的子文档而不仅仅是字符串).这意味着结果很大,导致我将结果传递给客户端.
显而易见的解决方案是对得到的不同值进行分页.但我找不到最佳方法来做到这一点.由于distinct没有分页选项(限制,跳过等),我转向聚合框架.我的基本管道是:
[
{$match: {... the documents I am interested in ...}},
{$group: {_id: '$myfield'},
{$sort: {_id: 1},
{$limit: 10},
]
Run Code Online (Sandbox Code Playgroud)
这给了我前10个唯一值myfield.为了获得下一页,将向管道中添加$ skip运算符.所以:
[
{$match: {... the documents I am interested in ...}},
{$group: {_id: '$myfield'},
{$sort: {_id: 1},
{$skip: 10},
{$limit: 10},
]
Run Code Online (Sandbox Code Playgroud)
但有时候,我从中收集唯一值的字段是一个数组.这意味着我必须在分组之前解开它.所以:
[
{$match: {... the documents I am interested in ...}},
{$unwind: '$myfield'}
{$group: {_id: '$myfield'},
{$sort: {_id: 1},
{$skip: 10},
{$limit: 10},
]
Run Code Online (Sandbox Code Playgroud)
其他时候,我获得唯一值的字段可能不是数组,但它的父节点可能是一个数组.所以:
[
{$match: {... the documents …Run Code Online (Sandbox Code Playgroud) 我有两个集合:
学生
{
_id: ObjectId("657..."),
name:'abc'
},
{
_id: ObjectId("593..."),
name:'xyz'
}
Run Code Online (Sandbox Code Playgroud)
图书馆
{
_id: ObjectId("987..."),
book_name:'book1',
issued_to: [
{
student: ObjectId("657...")
},
{
student: ObjectId("658...")
}
]
},
{
_id: ObjectId("898..."),
book_name:'book2',
issued_to: [
{
student: ObjectId("593...")
},
{
student: ObjectId("594...")
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个 Join to Student集合,该集合存在于Library集合的对象字段的issue_to数组中。
我想对学生收藏进行查询以获取学生数据以及图书馆收藏,如果学生存在或不存在,它将检查issued_to数组,否则获取图书馆文档。我试过 $lookup of mongo 3.6 但我没有成功。
db.student.aggregate([{$match:{_id: ObjectId("593...")}}, $lookup: {from: 'library', let: {stu_id:'$_id'}, pipeline:[$match:{$expr: {$and:[{"$hotlist.clientEngagement": "$$stu_id"]}}]}])
Run Code Online (Sandbox Code Playgroud)
但它会引发错误,请在这方面帮助我。我还查看了在 stackoverflow 上提出的其他问题,例如。上计算器问题, 对问题2计算器但这些comapring简单字段不是对象的数组。请帮我
我有三个集合,例如User,Program和`议程。这些模型如下。
用户模型
const mongoose = require('mongoose');
const UserSchema = mongoose.Schema({
name: {type:String},
email: {type:String}
},{timestamps:true
}
);
module.exports = mongoose.model('User', UserSchema);
Run Code Online (Sandbox Code Playgroud)
程序模型
const mongoose = require('mongoose');
const NoteSchema = mongoose.Schema({
name: {type:String},
timefrom: {type:Date},
timeto: {type:Date},
status: {type:String},
venue: {type:String},
timetype: {type:Number},
userid:{type:mongoose.Schema.Types.ObjectId,ref : 'User', required: true},
logo :{type:String,default: 'programe'}
},{timestamps:true
});
module.exports = mongoose.model('Program', NoteSchema);
Run Code Online (Sandbox Code Playgroud)
议程模型
const mongoose = require('mongoose');
const AgendaSchema = mongoose.Schema({
name: {type:String},
timefrom: {type:Date},
timeto: {type:Date},
status: {type:String},
proorder: {type:String},
proid:{type:mongoose.Schema.Types.ObjectId,ref …Run Code Online (Sandbox Code Playgroud) mongoose mongodb node.js mongodb-query aggregation-framework
我有一个嵌套的嵌入式文档,看起来像这样。每个帖子都有 n 条评论,每条评论都有一个包含姓名和电子邮件 ID 的用户详细信息。
我只想将评论用户的姓名投影到列表中
{
"PostId":"Post001",
"Comments":[
{"_id": "001",
"CommentedBy":{
"_id":"User001",
"Name":"UserName001",
"email":"user001@eg.com"
}
},
{"_id": "002",
"CommentedBy":{
"_id":"User002",
"Name":"UserName002",
"email":"user001@eg.com"
}
},
{"_id": "003",
"CommentedBy":{
"_id":"User003",
"Name":"UserName003",
"email":"user001@eg.com"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想通过使用 mongodb 的聚合管道转换成看起来像这样的东西。
{
"PostId":"Post001"
"Comments":[
{"_id": "001",
"CommentedBy":"UserName001",
},
{"_id": "002",
"CommentedBy": "UserName002"
},
{"_id": "003",
"CommentedBy": "UserName003"
}
]
}
Run Code Online (Sandbox Code Playgroud)
使用 mongo 的投影查询提供了一个CommentedBy包含所有名称的列表。我如何使用 mongo 的聚合查询来实现这一点。有没有办法不使用$unwind.
我试过的查询和我得到的结果。
db.getCollection('post').aggregate([
{$project:{"Comments.CommentedBy":"$Comments.CommentedBy.Name"}}
])
{
"_id" : ObjectId("5b98b4cc3bb8c65aeacabd78"),
"Comments" : [
{
"CommentedBy" …Run Code Online (Sandbox Code Playgroud) 我在 mongodb 中很新,现在我需要计算一个 $lookup 字段,这可能吗?
我有这样的事情:
result = await company.aggregate([
{
$lookup: {
from: 'userFocus',
localField: '_id',
foreignField: 'value',
as: 'focusUsers'
}
},
{
$project:{
name: 1,
focusUsers: {userId: 1}
}
}
])
Run Code Online (Sandbox Code Playgroud)
结果如下所示:
[
{_id: 'xxxx', name: 'first company', focusUsers: [user1, user2, user3...]},
{_id: 'yyyy', name: 'second company', focusUsers: []},
{_id: 'zzzz', name: 'third company', focusUsers: []}
]
Run Code Online (Sandbox Code Playgroud)
现在我想要一个额外的列显示 focusUsers 计数,换句话说,我想要一个如下所示的结果:
[
{_id: 'xxxx', name: 'first company', focusUsers: [user1, user2, user3], focusCount: 3},
{_id: 'yyyy', name: 'second company', focusUsers: …Run Code Online (Sandbox Code Playgroud) 我怎样才能在 mongo 中反向填充。我有 2 个架构
用户:
var user_scheme = new mongoose.Schema({
name:String,
age:Number,
roles:{
type:mongoose.Schema.Types.ObjectId,
ref:'Role'
}
});
Run Code Online (Sandbox Code Playgroud)
角色:
var role_scheme = new mongoose.Schema({
name:String,
});
Run Code Online (Sandbox Code Playgroud)
文件:
///user
{
"_id" : ObjectId("5bf9a19b01ce3e19b440aed8"),
"name" : "user1",
"age" : 22,
"roles" : ObjectId("5c0242621ab7b677e6b2e01e"),
"__v" : 0
}
///role
{
"_id" : ObjectId("5c0242621ab7b677e6b2e01e"),
"name" : "Admin"
}
Run Code Online (Sandbox Code Playgroud)
代码:
User.find().populate('roles').exec(function (err, data) {
res.json(data);
})
Run Code Online (Sandbox Code Playgroud)
在这里我可以在用户下获得角色,但是我如何在每个角色下获得用户。
mongoose mongodb node.js mongodb-query aggregation-framework
我想知道MongoDB$和$$MongoDB之间有什么区别。
例如:
'$sum': {
'$map': {
'input': '$data',
'as': 'currentData',
'in': { '$size': '$$currentData.d' }
}
}
Run Code Online (Sandbox Code Playgroud)
如果我将使用$而不是$$in 呢$$currentData.d?
我有两个文档,这些文档之间有 DBRef 关系。
{
"_id": 77,
"title": "Test title",
"status": "in-progress",
"reporter": {
"$ref": "User",
"$id": ObjectId("5daf022549a36e319879f357"),
"$db": "test"
},
"priority": "high",
"project": {
"$ref": "Project",
"$id": 30,
"$db": "gsc"
}
}
Run Code Online (Sandbox Code Playgroud)
用户文档:
{
"_id": ObjectId("5daf022549a36e319879f357"),
"username": "user1",
"email": "test@gmail.com",
"is_active": true,
"firstName": "user-1"
}
Run Code Online (Sandbox Code Playgroud)
我尝试了以下查询,但没有得到正确的结果
{
"_id": 77,
"title": "Test title",
"status": "in-progress",
"reporter": {
"$ref": "User",
"$id": ObjectId("5daf022549a36e319879f357"),
"$db": "test"
},
"priority": "high",
"project": {
"$ref": "Project",
"$id": 30,
"$db": "gsc"
}
}
Run Code Online (Sandbox Code Playgroud)
如何执行JOIN?另外,想要同时记录所有数据吗? 我想要来自任务文档的数据并建议如何加入项目字段。
需要这样的结果:
{
"_id" …Run Code Online (Sandbox Code Playgroud) 我有一个如下所示的集合:
{
"_id": 1,
"user": "xyz",
"sentence": "I watch movies and web series.",
"nouns": [
"movies",
"web series"
],
"verbs": [
"watch"
]
},
{
"_id": 2,
"user": "xyz",
"sentence": "movies are good way to relax",
"nouns": [
"movies"
],
"verbs": [
"relax"
]
}
Run Code Online (Sandbox Code Playgroud)
有两个数组字段,nouns并verbs为每个用户的句子。我想按user字段对文档进行分组,并分别计算nouns和verbs数组中每个不同元素的数量。我已经尝试了以下查询(如果你不想,你可以跳到这个聚合的最后阶段):
{
"_id": 1,
"user": "xyz",
"sentence": "I watch movies and web series.",
"nouns": [
"movies",
"web series"
],
"verbs": [
"watch"
]
},
{ …Run Code Online (Sandbox Code Playgroud)