我在一个文档中有一个(mongodb)嵌入式文档列表,我有兴趣在现有列表中添加一个新的嵌入式文档.
据我所研究,我可以使用$ addToSet,我无法弄清楚MongoDB是如何决定新文档是否已经存在于嵌入文档列表中或者是否是新文档,即MongoDB如何决定是否2个嵌入式文件是否相等?
ps我所拥有的嵌入式文档不仅仅是值,它们是非常复杂的结构,所以我想知道是否有任何地方我可以定义它们之间的平等意味着什么......
鉴于这样的集合:..
[
{
"_id" : ObjectId("5546329a470000850084a621"),
"name": "Joe",
"surname": "Smith",
"accounts": [
{
"_id" : ObjectId("5546329a470000850084a655"),
"default": true,
"status" : "approved",
"activationTime" : ISODate("2013-05-03T14:37:15.025Z")
},
{
"_id" : ObjectId("5546329a470000850084a688"),
"default": true,
"status" : "approved",
"activationTime" : ISODate("2014-06-03T14:37:15.025Z")
}
]
},
{
"_id" : ObjectId("9546329a470079850084a622"),
"name": "Jimmy",
"surname": "Brown",
"accounts": [
{
"_id" : ObjectId("5546329a470790850084a651"),
"default": true,
"status" : "suspended",
"activationTime" : ISODate("2015-02-03T14:37:15.025Z")
},
{
"_id" : ObjectId("5546329a470019850084a611"),
"default": true,
"status" : "approved",
"activationTime" : ISODate("2015-04-03T14:37:15.025Z")
}
]
},
]
Run Code Online (Sandbox Code Playgroud)
...我怎么找到一份文件 …
嗨所以我在mongo中使用mongoengine测试数据用于存储用户的购物车:
{
"_id" : ObjectId("55e492ac516ddc17a8b07d2a"),
"user" : ObjectId("55e3f236516ddc78296968be"),
"items" : [
{
"item" : ObjectId("55e24cd6516ddcbdc081842b"),
"quantity" : 2,
"added_date" : ISODate("2015-08-31T17:44:49.023Z")
},
{
"item" : ObjectId("55e24cd6516ddcbdc0818425"),
"quantity" : 3,
"added_date" : ISODate("2015-08-31T17:44:49.025Z")
},
{
"item" : ObjectId("55e24cd6516ddcbdc0818420"),
"quantity" : 3,
"added_date" : ISODate("2015-08-31T17:44:49.026Z")
}
]
}
Run Code Online (Sandbox Code Playgroud)
这里的模型:
class CartItem(mongoengine.EmbeddedDocument):
item = mongoengine.ReferenceField('Item')
quantity = mongoengine.IntField()
added_date = mongoengine.DateTimeField(default=datetime.now())
class Cart(mongoengine.Document):
user = mongoengine.ReferenceField('User')
items = mongoengine.EmbeddedDocumentListField(CartItem)
Run Code Online (Sandbox Code Playgroud)
在这里,我将项目存储在用户的购物车中.现在我想获取项目列表字段中的所有唯一项目,因为会有重复的项目.
我执行以下查询来获取项目:
cart = Cart.objects.filter(user=user).first()
queryset = cart.items
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我认为我必须对项目进行分组,我尝试在过滤器中使用原始查询:cart.items.filter(__raw__...) 但这不起作用,因为在这种情况下不支持raw.有人可以帮助我如何做到这一点?谢谢!
我在mongodb集合中有一个文档,如下所示:
{
_id: 133,
Name: "abc",
Price: 20
}
Run Code Online (Sandbox Code Playgroud)
我想添加一个新的字段"PackSizes",它可能是或不是数组类型,然后想在其中嵌入一个文档.喜欢-
PackSizes:
[
{_id: 123, PackSizeName:"xyz", UnitName:"pqr"}
]
or,
PackSizes: {_id: 123, PackSizeName:"xyz", UnitName:"pqr"}
Run Code Online (Sandbox Code Playgroud)
我是mongodb的新手.请帮忙.
我正在尝试在下面提到的 mongo 集合中的 ScorecardList.filename 字段上创建唯一索引。目的是我们不应该能够在 ScorecardList 中创建具有相同文件名的另一个元素。
蒙戈架构:
{
"Name": "Ravikant Khond",
"PIN" : "411057",
"scorecardList": [
{
"fileName" : "ScoreCard_April_2016.pdf",
"runDate" : ISODate("2016-05-01T00:00:00.000Z"),
"month" : "April",
"year" : "2016"
},
{
"fileName" : "ScoreCard_May_2016.pdf",
"runDate" : ISODate("2016-06-01T00:00:00.000Z"),
"month" : "May",
"year" : "2016"
}
]
}
Run Code Online (Sandbox Code Playgroud)
[1]
我在创建唯一索引时尝试使用的 Mongo 命令如下:
db.testing.createIndex(
{ "scorecardList.filename": 1 },
{
unique: true,
partialFilterExpression: {
"scorecardList.filename": { $exists: true }
}
}
);
Run Code Online (Sandbox Code Playgroud)
即使索引已创建,我也可以添加具有现有文件名的记分卡。
请帮忙。
我目前正在尝试为 MongoEngine 中的嵌入文档编写通用删除方法。我认为可以访问包含嵌入文档的文档对象并根据父文档定义删除函数。
删除函数可能如下所示:
def delete():
{parent_document}.update(pull__myField={self})
我还不太确定这是否真的像我想象的那样有效,但我认为值得一试。我唯一不知道的是如何访问嵌入文档所在的文档。parent_document所以基本上我必须以某种方式从嵌入式文档访问上面代码中引用的文档。
有谁知道如何做到这一点?一般来说,如果有人这么认为,也许这是一个坏主意,请告诉我。
给定与这样的扩展的简单嵌入关系:
class D
include Mongoid::Document
embeds_many :es do
def m
#...
end
end
end
class E
include Mongoid::Document
embedded_in :d
end
Run Code Online (Sandbox Code Playgroud)
你可以这样说:
d = D.find(id)
d.es.m
Run Code Online (Sandbox Code Playgroud)
在扩展程序的m方法中,如何访问d我们正在使用的特定内容?
我有以下型号
class Professional
include Mongoid::Document
field :first_name, type: String
field :last_name, type: String
field :company_name, type: String
field :address, type: String
validates :first_name, length: { minimum: 5, :message => "What" }, format: { with: /\A[a-zA-Z]+\z/, message: "only allows letters" }
end
Run Code Online (Sandbox Code Playgroud)
我想要包含一个嵌入式文档,我可以存储多个办公地址.我正在寻找以下DB的结构
{
"first_name": "Harsha",
"last_name": "MV",
"company_name": "Mink7",
"offices": [
{
"name": "Head Office",
"address": "some address here"
},
{
"name": "Off Site Office",
"address": "some large address here"
}
]
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试查询 MongoDB 数组中的单个嵌入文档。我不知道我做错了什么。以编程方式,我将查询该文档并将新的嵌入文档插入当前的空trips数组中。
{
"_id" : ObjectId("564b3300953d9d51429163c3"),
"agency_key" : "DDOT",
"routes" : [
{
"route_id" : "6165",
"route_type" : "3",
"trips" : [ ]
},
{
"route_id" : "6170",
"route_type" : "3",
"trips" : [ ]
},
...
]
}
Run Code Online (Sandbox Code Playgroud)
以下查询 - 我在 mongo shell 中运行 - 返回空:
db.tm_routes.find( { routes : {$elemMatch: { route_id:6165 } } } ).pretty();
db.tm_routes.find( { routes : {$elemMatch: { route_id:6165,route_type:3 } } } ).pretty();
db.tm_routes.find({'routes.route_id':6165}).pretty()
Run Code Online (Sandbox Code Playgroud)
也是。db.tm_routes.find({'routes.route_id':6165}).count()0
以下查询返回数组中的每个文档
db.tm_routes.find({'routes.route_id':'6165'}).pretty();
{ …Run Code Online (Sandbox Code Playgroud) 我目前有一个架构,目前看起来像:
var User = new Schema({
id: String,
firstName: String,
lastName: String,
password: String,
username: String,
position: [{
title: String,
location: String,
start: String,
term:Number,
description:String,
date: {type: Date, default: Date.now}
}]
});
Run Code Online (Sandbox Code Playgroud)
我有两个用户,每个用户有两个嵌入式位置文档.
用户1:
"position" : [
{
"title" : "Web Developer",
"location" : "Dublin",
"start" : "May 2017",
"term" : 6,
"description" : " Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus quis erat vitae dsit amet, consectetur adipiscing elit. Vivamus quis erat vitae dolor tempus euismod …Run Code Online (Sandbox Code Playgroud) mongodb ×7
mongoengine ×2
mongoid ×2
node.js ×2
arrays ×1
django ×1
document ×1
mongoid3 ×1
mongoose ×1
operation ×1
python ×1
subdocument ×1
unique-key ×1