gpt4 book ai didi

node.js - 在嵌套文档中添加元素然后检索 _id

转载 作者:太空宇宙 更新时间:2023-11-04 02:13:23 24 4
gpt4 key购买 nike

我有以下集合定义:

// Includes
import mongoose from 'mongoose';

const Schema = mongoose.Schema;

// Create required sub schemas
const subSchema0 = new Schema({
value: String,
});

const subSchema = new Schema({
idWordsLibraryName: {
type: Schema.Types.ObjectId,
ref: 'WordsLibrary1_0',
},

type: String,
values: [
subSchema0,
],
});

const schema = new Schema({
version_: String,

idWordsLibraryName: {
type: Schema.Types.ObjectId,
ref: 'WordsLibrary1_0',
},

idsDads: [{
type: Schema.Types.ObjectId,
ref: 'LocationStructure1_0',
}],

params: [
subSchema,
],
});

摘要 -> 一个包含嵌套参数和嵌套值的文档。

我有以下请求,将一些值添加到特定参数中

this.findOneAndUpdate({
_id: data.idLocationStructure,

'params._id': data.idLocationStructureParameter,
}, {
$push: {
'params.$.values': {
$each: dataToPush,
},
},
}, {
new: true,
});

它按预期工作。

我现在想要的是获取推送元素的_id,但不加载参数的所有值。

我尝试使用 findOneAndUpdate 的 select 选项,但使用投影不起作用:

this.findOneAndUpdate({
_id: data.idLocationStructure,

'params._id': data.idLocationStructureParameter,
}, {
$push: {
'params.$.values': {
$each: dataToPush,
},
},
}, {
new: true,

select: {
'params.$.values': 1,
},
});

它让我感动:

{
"_id": "57273904135f829c3b0739dd",

"params": [
{},
{},
{},
{},
],
},

我也尝试执行第二个请求来获取 _ids,但它也不起作用:

this.find({
_id: data.idLocationStructure,

'params._id': data.idLocationStructureParameter,
}, {
_id: 1,

'params.$.values': {
$slice: -nbAdded,
},
});

如果您知道如何在不加载参数的所有值的情况下检索推送值的 _id,非常欢迎您:)

最佳答案

经过大量的网络研究和堆栈溢出<3我找到了一个解决方案,即:

this.aggregate([{
$match: {
_id: new mongoose.Types.ObjectId(data.idLocationStructure),
},
},
{
$unwind: '$params',
}, {
$match: {
'params._id': new mongoose.Types.ObjectId(data.idLocationStructureParameter),
},
},
{
$unwind: '$params.values',
},
{
$sort: {
'params.values._id': -1
},
},
{
$limit: nbAdded,
},
{
$project: {
_id: '$params.values._id',
},
},
]);

如果您遇到同样的问题,解释如下:

  • $match 让我获得了良好的高级文档

  • $unwind 让我进入文档中的 params 数组 $match

  • $match 让我采用好的参数

  • $unwind 让我进入值数组

  • 我按 _id DESC $sort 所有值

  • $limit为我预先添加的值的数量

  • 我更改了_id的名称​​(如别名)

因此我得到了一个包含最后添加值的数组_ids

关于node.js - 在嵌套文档中添加元素然后检索 _id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36981348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com