Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays sails.js Waterline保存、读取、解析列表或数组_Arrays_Node.js_Sails.js_Waterline - Fatal编程技术网

Arrays sails.js Waterline保存、读取、解析列表或数组

Arrays sails.js Waterline保存、读取、解析列表或数组,arrays,node.js,sails.js,waterline,Arrays,Node.js,Sails.js,Waterline,在帆船水线中创建、读取和分析列表的正确方法是什么? 我在堆栈溢出或水线Github上找不到任何东西 确切地说,我想在idea模型中保存一个标签列表,然后能够按标签进行搜索 创意模式: attributes: { tags: { type: 'string' } } 创建函数(标记以逗号分隔的字符串形式传递) 这成功地存储了标记:即'tags=['tag1','tag2',…,'tagN'] 我尝试了.find.where的时髦组合,但没有效果 简易版:如何返回一些用户请求的想法

在帆船水线中创建、读取和分析列表的正确方法是什么?

我在堆栈溢出或水线Github上找不到任何东西

确切地说,我想在idea模型中保存一个标签列表,然后能够按标签进行搜索

创意模式:

attributes: {
  tags: {
    type: 'string'
  }
}
创建函数(标记以逗号分隔的字符串形式传递)

这成功地存储了标记:即'tags=['tag1','tag2',…,'tagN']

我尝试了
.find
.where
的时髦组合,但没有效果

简易版:如何返回一些用户请求的想法
tagX

更难的版本:如何从标签列表中返回至少有一个标签的想法?

选项一 我建议您为标签创建一个模型

接下来,编辑您的创意模型以参考您的标签模型

然后,要获得与“tagX”相关的所有想法,您需要:

var tag = "tagX";
// This same code should also work with an array,
// but then you will have to use find instead of findOne
// var tag = ["tagX", "tagY", "tagZ"]

Tag.findOne({name: tag}).populate('ideas').then(function (tag) {
  // Do anything you want with the Ideas.
  tag.ideas.forEach(function(idea) {
    console.log(idea);
  });
}).catch(console.err);
创建带有标签“tagX”和“tagY”的创意“一些伟大的创意” 在集合中添加和删除标记非常简单

Promise.all([Idea.create({ name: 'Some Grand Idea'}),
  Tag.create({ name: 'TagX'}),
  Tag.create({ name: 'TagY'})]).
    spread(function (idea, tagX, tagY) {
      // Add tagX
      idea.tags.add(tagX.id);
      // Add tagY
      idea.tags.add(tagY.id);
      // To remove a tag, simply call remove
      // idea.tags.remove(1)
      idea.save(console.log);
    }).catch(console.log);
总之,得到一个想法模型。并在Idea.tags集合中添加/删除标记模型。 这是双向的,也就是说,您可以获得一个标签模型,并将一个想法添加到Tag.ideas集合
Tag.ideas.add(someIdea.id)
,其效果相同

选择二 或者,以您设置的方式使用Idea模型

使用一些标签获取想法:

Idea.find({ tags: { 'like': '%tagX%' }})
使用标签列表获取想法:

Idea.find({
  or : [
    { tags: { 'like': '%\'tagX\'%' } },
    { tags: { 'like': '%\'tagY\'%' } },
    { tags: { 'like': '%\'tagZ\'%' } }
  ]
})

首先,为什么必须有一个标签模型?当然,我不必每次存储列表时都创建模型。这在许多清单中似乎是不可持续的。其次,如何在
create()
update()
上为想法分配标签。最后,为什么要在标记模型中存储想法。看起来您存储的信息是完成任务所需信息的两倍。谢谢,除非我把这个问题解释错了,否则我认为有一个标签模型是很有意义的。标签是它自己的实体,不是吗?你想搜索标签,听起来你应该有一个模型。如果我错了,你可以这样做:
Idea.find({tags:{'like':'%tagX%})
I在标记模型中存储对想法的引用,在Idea模型中存储对标记的引用,这样你就可以在标记和想法之间建立多对多的关系。可能对标记有一点误解。我将标记用作描述一个
想法的
关键字
,因此我设想标记是每个想法的一个属性。我的临时工作是
Idea.find({tags:{'contains':tag}})
。但是我觉得这可能是在解析字符串,而不是列表。对于那个项目,它是可以通过的,但我永远不想这样做的生产质量应用。如果你可以添加如何正确地存储一个列表在模型,保存一个列表到该模型,从该列表中读取,并附加到该列表到您的答案。我很乐意接受您的回答,请留下您的初始解决方案作为可能的变体。我肯定会在新的未来使用它。我在答案中添加了更多的例子。我希望这能回答你的问题。
Promise.all([Idea.create({ name: 'Some Grand Idea'}),
  Tag.create({ name: 'TagX'}),
  Tag.create({ name: 'TagY'})]).
    spread(function (idea, tagX, tagY) {
      // Add tagX
      idea.tags.add(tagX.id);
      // Add tagY
      idea.tags.add(tagY.id);
      // To remove a tag, simply call remove
      // idea.tags.remove(1)
      idea.save(console.log);
    }).catch(console.log);
Idea.find({ tags: { 'like': '%tagX%' }})
Idea.find({
  or : [
    { tags: { 'like': '%\'tagX\'%' } },
    { tags: { 'like': '%\'tagY\'%' } },
    { tags: { 'like': '%\'tagZ\'%' } }
  ]
})