使用mongoose,我希望搜索具有特定属性的子文档并返回最近的一个。
// the relevant part of the user schema
id: String,
__history__: {
reply: []
}
// the components of a 'reply' (not defined by a schema)
id: String,
createdAt: Date,
props {
tipID: String
}
给定一个特定的用户id
,我想搜索他们的reply[]
s,查找他们的道具中有
tipID
的回复。然后,我想返回包含最新的createdAt
的reply
的tipID
。
一般来说,我不熟悉井式编码。我想知道如何最好地解决这个问题。
因为$elemMatch返回了一个错误(我想是因为reply不是一个正确的模式定义的文档),所以我改为使用以下内容。
User.findOne("_id": user._id}, function (err, doc) {
var replies = doc.__history__.reply;
for ( var i = 0; i < replies.length; i++ ) {
if (replies[i].props.hasOwnProperty("tipId")) {
// do something
break; // stop because i only wanted the first hit
}
}
注意:我不必担心按时间排序,因为\uuu history\uuuu.reply
项目已经由最新的first订购。
如果您只找到一个文档,请按如下方式组织回复。。
// find your doc by ID
user.findOne({ id: id }, function(err, doc) {
// sort replies by createdAt date
var replies = _.sortBy(doc.reply, function(reply) {
return reply.createdAt.getTime(); // convert to seconds from jan 1, 1970
});
return replies[0].props.tipId;
})
这是一个重复的问题,猫鼬通过标准查找子文档
对于您的具体问题,猫鼬子文档的技巧有两个:
a) 如果可以,请避免嵌套在子文档中,即不要将属性嵌套在propId
中,而是直接将这些属性放入回复中,不管它们是什么。
b)使用$elemMatch
,正如我上面引用的重复答案中建议的那样。这将确保mongoDb找到正确的文档,因为mongoDb将{a: 1, b: 2}
和{b: 2, a: 1}
识别为两个不同的子文档。
我有一份这样的文件: 我想通过将其与数量字段(2*800)相乘来更新价格字段,其中的结果将更新/分配给价格。(对于本例,价格更新为1600)。 更新后的文档: 我的选择查询如下: 我怎样才能做到这一点?
我试图更新一个子文档(有效),然后更新除上一个子文档之外的多个子文档。基本上,每次
我想使用mongoose从多个文档更新多个子文档。 我目前的代码是: 模式的一部分是: 但是这段代码只更新id arr中的最后一个元素。
我有一份这样的文件 上面的文档可以这样概括如下,便于理解。 我需要增加nums子文档中数量的值,该值位于产品子文档中,基于其\u id。 这是我迄今为止所尝试的,但它不起作用,因为我不知道如何捕获nums对象内的\u id,以便更新子子文档数组中的特定对象。 我怎样才能做到这一点?
问题内容: 使用Mongoose可以一次性在一个(子)文档上设置多个属性吗?我正在尝试做的一个例子: 假设我有以下架构: 然后我想做: 通常,我可以使用运算符来实现此目的,但是我的问题是在此示例中是的子文档(嵌入式架构)。所以当我尝试去做 它替换了由标识的子文档实例。目前,我已经通过手动设置仅字段来“解决”它,但是我希望有一种更好的方法来做到这一点。 问题答案: 基于的字段以编程方式构建对象,以使
问题内容: 我正在尝试从猫鼬文档中存储的集合中删除一项。我的文档如下所示: 我想删除SKU为12的金鱼。我正在执行以下操作: 当我这样做时,出现错误“ TypeError:无法读取未定义的属性’等于’”。我不明白为什么。 问题答案: 您需要,然后打个电话。用于顶级文档