问题标签 [subdocument]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - 阻止 Mongoose 为子文档数组项创建 _id 属性
如果您有子文档数组,Mongoose 会自动为每个数组创建 id。例子:
有没有办法告诉 Mongoose 不要为数组中的对象创建 id?
mongodb - 在 MongoDB 中,何时使用简单的子文档,何时使用具有 2 字段元素的数组?
背景
我将表行存储为 MongoDb 文档,每列都有一个名称。假设 table 有这些感兴趣的列:Identifier
, Person
, Date
, Count
。MongoDb 文档还有一些与表数据分开的额外字段,由timestamp
. 列不是固定的(这就是为什么我首先使用无模式数据库来存储它们)。
将需要执行各种复杂但迄今为止未指定的查询。我不是很关心性能,尽管查询性能可能会成为瓶颈。一旦插入,文档将不会被修改(Identifier
将创建一个相同的新文档),并且插入不是很频繁(比如说,每天 1000 个新的 MongoDb 文档)。因此,随着时间的推移,数据量将稳步增长。
例子
直接的方法是收集 MongoDb 文档,例如:
现在我看到了另一种方法(例如在这个问题的接受答案中),使用每个对象有两个字段的数组:
问题
第二种方法是否有任何意义?
如果是,那么如何选择使用哪个?特别是,是否有一些特定类型的查询使用一种方法很容易/便宜,而另一种方法很难/昂贵?有什么“经验法则”,或者两者的赞成名单?一种方法不方便的真实案例将特别有价值。
javascript - 访问 mongoDB 中的子文档
我在 mongoDB 中有一个集合用户,每个用户都有一个小部件文档,如下所示:
在文件 client.js 中,我想访问 Widgets 数据。
我试试这个:
或者
我在这里做错了什么?
javascript - 使用 mongoDB 插入子文档
我在集合中有以下文档:
如何{id: "1", blabla: "blabla"}
在“小部件”中插入“名称”3?
mongodb - Meteor + Mongodb:有没有办法从 db.find() 的结果中完全排除一些子文档?
db.find()
可以通过指定参数轻松管理结果集中某些字段的存在fields
(我使用 Meteor 并在服务器端测试所有查询,在发布功能中)。SayMeteor.collection.find({}, { fields: { 'a': false } })
告诉 Mongoa
从结果集中排除字段。
但是,如果a
是子文档,这不起作用。比如说,它有两个字段:x
和y
。如果我指定{ 'a.x': false }
,则排除其中一个字段,但不排除另一个。如果我添加{ 'a': false}
,什么都不会发生。
问题是:有没有办法从结果集中过滤掉位于文档的某些特定子文档中的所有字段?
mongodb - 由 $push 子文档引起的副本集滞后
我有一个文档记录了我网站内的用户旅程。
鼠标移动存储为该文档的子文档。我记录鼠标移动,然后定期使用 $push 附加到子文档数组。从我对 Mongo 的初步阅读来看,这似乎是一种明智/有效的方法。现在我不太确定。
我最近在使用副本集时遇到了一些问题 - 当我的使用量达到峰值时,辅助节点与主节点不同步。查看我的 oplog,我注意到有很多 $set 命令,每个命令都包含用户鼠标移动的整个历史记录,而且似乎 Mongo 正在做这种扩展,以便 oplog 记录可以是不可靠的。
相信它与 JIRA 上的这个问题有关https://jira.mongodb.org/browse/SERVER-9784
我是否正确解释了这个问题?如果是这样,通过网络传播更改似乎是一种非常低效的方式。有没有办法解决这个问题?将鼠标移动分成单独的小文档会更好吗?或者我可以通过在子文档数组上使用动态键来解决这个问题(因此避免使用 $push 命令)。
mongodb - 是否可以在创建时对 MongoDb 子文档进行“不修改”约束?
我想修复 MondoDb 文档中的特定子文档值,因此无法在下次更新或任何其他可以修改文档的 MongoDb 操作时对其进行修改。
例如,如果插入像下面这样的文档,我会喜欢“eyesColor”值不能更改。
{
"id" : "someId",
"name": "Jane",
"eyesColor" : "blue"
}
可能的更新是:
{
"id" : "someId",
"name": "Amy",
"eyesColor" " : "green"
}
这次更新后我需要的结果是 :
{
"id" : "someId",
我想这样做是因为我正在创建的项目中不存在使用 $set 和 $unset 运算符的可能性。在更新之前读取现有文档以获取子文档的值(“eyesColor”)将降低我正在处理的应用程序的性能。
实际上,我需要的约束类似于集合上的固定大小(上限集合)。不同之处在于它位于子文档而不是集合上,并且位于子文档中包含的值而不是大小上。
这种类型的约束有什么解决方案吗?
mongodb - 如何仅从 mongodb 子文档中查询某些字段?
对于我的测试应用程序,我使用以下模式存储文章和评论:
现在,我正在尝试获取在某个日期之后发布的所有评论(仅作为文章中的子文档存储)。此外,我只想要这个text
领域,而不是那个author
。这相当于:Comment.find({created: {$gte: date}}, "text")
但由于评论没有存储在他们自己的数据存储中,所以这不起作用。
java - MongoDB 是否使用相同的数据重复子文档?
我对 MongoDB 完全陌生,正在考虑使用 JDO 作为不可知层将我的基本持久性代码(对于许多项目)转移到它。所以我是从一个喜欢以 bean 作为基本模型单元工作的 Java 开发人员的角度来问这个问题的。
我的问题是关于子文档以及它们是独立存在还是由 MongoDB 在内部合并。即,如果我有这样的域结构:
家庭 - 人员集合
如果我有一个家庭的文件,它将有多个人,但每个人都有相同的地址。
每个地址是否会是 MongoDB 中的一个不同且独立的实体(即使它们是相同的“类”并且具有相同的值。或者 Mongo 是否以某种方式识别它们指的是同一个实体并在内部为每个地址存储一个 UID?
更重要的是。如果我更新一个地址的邮政编码,这是否意味着家庭地址子文档的每个成员都会反映该更改?
似乎如果确实如此,那么它就会误入关系领域,但是如果没有这样的引用,我会看到可怕的低效率出现吗?
mongodb - 使用 MongoDB 更新特定子文档时遇到问题
我的文档如下所示:
我的查询是:
{ txid: '7e621eeb02874ab039a8566fd36f4591e65eca65313875221842c53de6907d6c',
'vin.txid': 'c04c413576307737f3ad48efe5d509ebc883e1d04822b3a2eccf6a80a4482932',
'vin.vout': 0 }
更新是:
但是当我运行它时,它会更新vin
数组中的第一项而不是第二项。现在,奇怪的是,如果我将查询更改为:
{ txid: '7e621eeb02874ab039a8566fd36f4591e65eca65313875221842c53de6907d6c',
'vin.txid': 'c04c413576307737f3ad48efe5d509ebc883e1d04822b3a2eccf6a80a4482932'}
然后它工作正常。我认为问题在于我的查询在 中查找 2 个元素vin
,但我需要同时搜索这两个元素。我究竟做错了什么?